我一直在试图理解异步/等待是如何工作的,我想要做的就是让它等到值被返回。但是,我无法通过回调、承诺或async/await
来实现这一点。我做错了什么,为什么async/await
不像我期望的那样工作呢?(等待运行其他代码,直到这个承诺得到解决)
许多问题,如这一个链接到“介绍页”。我都读过了,我明白他们是做什么的,我只是不知道如何把它们写好,因为我相信我做的一切都是正确的,我只是遗漏了一些console.log("xcdcxcxcxccxvccvffdgfcd")
;
thing();
async function thing() {
let c = await otherthing();
console.log("dfasfadsfdasasdfa" + c)
}
async function otherthing() {
await setTimeout(function() {
return new Promise((resolve, reject) => {
let f = "rerewwqfewfasgsadf"
return resolve(f);
})
}, 3000);
}
console.log
应该等到承诺的值c
被返回,但是它似乎不起作用。为什么?
发布于 2019-01-04 12:17:33
异步/等待与返回承诺的函数一起工作。您的otherthing
函数不返回任何内容。
您可以通过返回实例化的承诺来修复代码,如下所示:
thing();
async function thing() {
let c = await otherthing();
console.log("dfasfadsfdasasdfa" + c)
}
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(function () {
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000)
});
}
发布于 2019-01-04 12:17:11
您必须从return
函数中获取new Promise
,而不是从setTimeout
回调。您应该构建承诺,在其执行器回调中启动异步操作(setTimeout
),然后异步地启动resolve()
或reject()
承诺。
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(function(){
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000);
});
}
这里不需要任何async
/await
,因为函数本质上只是setTimeout
的一个承诺包装器。另见How do I convert an existing callback API to promises?。
发布于 2019-01-04 12:16:36
你应该把setTimeout
移动到Promise
体内,然后做resolve(f)
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000);
});
}
https://stackoverflow.com/questions/54038764
复制相似问题