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

我决定使用new
JavaScript
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`);
})();