[英]How does Async/await work and why does it not work here
我一直在尝试了解异步/等待的工作方式,我要做的就是让它等待直到返回值。 但是,我无法通过回调,promise或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
为止,但是,它似乎不起作用。 为什么?
异步/等待与返回承诺的函数一起使用。 您的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) }); }
您必须从otherthing
功能(而不是从setTimeout
回调) return
new Promise
。 您应该构造诺言,在其执行器回调中启动异步操作( setTimeout
),然后异步实现诺言resolve()
或reject()
。
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(function(){
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000);
});
}
您不需要await
这里进行任何async
/ await
,该函数本质上只是setTimeout
周围的一个Promise包装器。 另请参见如何将现有的回调API转换为Promise? 。
您应该在Promise
主体内移动setTimeout
然后执行resolve(f)
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000);
});
}
async function otherthing
没有return
语句,因此它将始终返回解析为undefined
的promise。
await setTimeout(...)
没有任何意义。 您只能await
一个承诺,而setTimeout
不会返回一个承诺。
您需要明确地:
new Promise()
内otherthing
setTimeout
的回调函数中的resolve()
具有所需的值 return
从承诺otherthing
不要在传递给setTimeout
的回调函数中创建promise。 那里没有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.