编程语言
首页 > 编程语言> > javascript – 为什么`async / await`在我的情况下不起作用?

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