我正在使用javascript编程,但偶然发现了此代码,我想知道下面的代码如何以及为什么起作用:
var test = async () => {
console.log("before");
await setTimeout(() => {
console.log("after");
}, 1000);
};
test();
它是这样的:
这是示例代码,但是我的问题是这如何工作? setTimeout()不会返回Promise(我认为),因此异步/等待对应该不起作用或者是我缺少的东西?
答案 0 :(得分:3)
嗯,它不起作用:
async function test() {
console.log("before");
await setTimeout(() => {
console.log("callback");
}, 1000);
console.log("after");
}
test();
您将收到before
-after
-callback
。 await
不会停止任何事情,因为-正如您所认识到的-setTimeout
不会返回承诺。它等待undefined
并继续下一条语句。您的示例只是缺少下一条语句,因此看不到任何区别。这是一个工作示例:
function delay(t) {
return new Promise(resolve => setTimeout(resolve, t));
}
async function test() {
console.log("before");
await delay(1000);
console.log("after");
}
test();
答案 1 :(得分:-2)
如果await运算符后面的 expression 的值不是Promise,则将其转换为解析的Promise。
因此,await setTimeout
表达式将转换为已解决的Promise。