javascript – 为什么`async / await`在我的情况下不起作用?
作者:互联网
我读过async / await,但我有一个关键问题.
首先,我解释一个旧的例子,以显示我的问题的基础,然后我问我的确切问题.
大家都知道:
console.log('1');
console.log('2');
console.log('3'); // Ex: 123
这很简单,但在下面的情况下:
console.log('1');
setTimeout(()=>{
console.log('2');
},0);
console.log('3'); // Ex: 132
它也很简单,setTimeout函数是异步的,JavaScript从它跳转并在解析后运行它的函数,所以我们在1和3之后看到2.
但是,现在我读了async / await,我写了一个这样的函数:
(async function test() {
console.log('1');
await setTimeout(()=>{
console.log('2');
},0);
console.log('3');
})(); // Ex: 132
出口也是132,为什么?这是我的问题,为什么3在2之前运行?我期待因为1等待2之后的async / await然后写了3.为什么132?
解决方法:
等待只有在传递给它的值是Promise时才会挂起.在您的情况下,setTimeout返回一个Number,因此await不会等待它.
正确的代码如下:
async function test() {
console.log('1');
await new Promise((resolve, reject) => {
setTimeout(() => {
console.log('2');
resolve()
}, 0);
});
console.log('3');
}
标签:javascript,asynchronous,async-await,ecmascript-2017 来源: https://codeday.me/bug/20190717/1486463.html