Javascript 异步/等待不';在我的例子中不起作用
许多Javascript 异步/等待不';在我的例子中不起作用,javascript,asynchronous,async-await,settimeout,Javascript,Asynchronous,Async Await,Settimeout,许多JavaScript开发人员都知道async/await及其优点,因此我尝试测试一个异步操作的老示例,让我们看看我的实验: 毫无疑问,以下代码的答案是: /*Line: 1*/ console.log(`1`); /*Line: 2*/ console.log(`2`); /*Line: 3*/ console.log(`3`); //==> 123 所以我想在第二行加上一个setTimeout: /*Line: 1*/ console.log(`1`); /*Line: 2*/
JavaScript
开发人员都知道async/await
及其优点,因此我尝试测试一个异步操作的老示例,让我们看看我的实验:
毫无疑问,以下代码的答案是:
/*Line: 1*/ console.log(`1`);
/*Line: 2*/ console.log(`2`);
/*Line: 3*/ console.log(`3`);
//==> 123
所以我想在第二行加上一个setTimeout
:
/*Line: 1*/ console.log(`1`);
/*Line: 2*/ setTimeout(() => {
console.log(`2`);
}, 0);
/*Line: 3*/ console.log(`3`);
//==> 132
由于第二行的异步动作,2
位于13
之后,因此在控制台中显示132
我决定使用newJavaScript
的async/await
特性再次查看123
,因此我编写了如下代码:
(async () => {
console.log(`1`);
await setTimeout(() => {
console.log(`2`);
}, 0);
console.log(`3`);
})();
但它不起作用,我在控制台上又看到了
132
。哪一部分我做错了或者我不知道?setTimeout
没有返回承诺。为了让它工作,您必须创建一个函数,返回在setTimeout回调中解析的承诺
(异步()=>{
console.log(`1`);
等待新的承诺(解决=>{
设置超时(()=>{
解决(“已解决”);
console.log(`2`);
},0);
});
console.log(`3`);
})();代码>setTimeout
未返回承诺。为了让它工作,您必须创建一个函数,返回在setTimeout回调中解析的承诺
(异步()=>{
console.log(`1`);
等待新的承诺(解决=>{
设置超时(()=>{
解决(“已解决”);
console.log(`2`);
},0);
});
console.log(`3`);
})();
您需要创建函数,例如异步函数foo(){}
,并在其中进行等待
调用。您需要创建函数,例如异步函数foo(){}
,并在其中进行等待
调用。等待
等待承诺得到解决。由于setTimeout
不是一个承诺,程序的执行不会等到它被执行。您需要将setTimeout()
包装在以下链接的第一个示例中指定的承诺内,以使您的示例按预期工作:
等待
等待承诺得到解决。由于setTimeout
不是一个承诺,程序的执行不会等到它被执行。您需要将setTimeout()
包装在以下链接的第一个示例中指定的承诺内,以使您的示例按预期工作:
您只能等待返回承诺的函数。请注意,await只能在异步函数中使用:
异步函数someFunc(){
console.log(`1`);
等待新承诺((解决、拒绝)=>setTimeout(()=>{
console.log(`2`);
解决();
}, 0));
console.log(`3`);
}
someFunc()代码>您只能等待返回承诺的函数。请注意,await只能在异步函数中使用:
异步函数someFunc(){
console.log(`1`);
等待新承诺((解决、拒绝)=>setTimeout(()=>{
console.log(`2`);
解决();
}, 0));
console.log(`3`);
}
someFunc()应该对返回承诺的函数调用代码>Await(否则它只返回承诺)
setTimeout
不返回承诺,因此应使用返回承诺的函数将其包装起来
请在此处阅读更多信息:
这段代码应该可以完成这项工作
(异步()=>{
console.log(`1`);
等待(()=>{
返回新承诺(解决=>{
设置超时(()=>{
控制台日志(2);
解决()
}, 1000);
});
})();
console.log(`3`);
})();应该对返回承诺的函数调用代码>Await(否则它只返回承诺)
setTimeout
不返回承诺,因此应使用返回承诺的函数将其包装起来
请在此处阅读更多信息:
这段代码应该可以完成这项工作
(异步()=>{
console.log(`1`);
等待(()=>{
返回新承诺(解决=>{
设置超时(()=>{
控制台日志(2);
解决()
}, 1000);
});
})();
console.log(`3`);
})();代码>