JavaScript 中异步函数的控制流程

问题描述 投票:0回答:1

在此代码中,

.then
的回调函数在
console.log("still going on...")
之前执行,但通常
.then
的回调函数应先发布到微堆栈,然后再进入调用堆栈。

这里发生了什么不同,为什么?

async function test(){
    console.log("start");
    console.log("going on...");
    await new Promise((resolve, reject) => {setTimeout(() => resolve("promise value"), 5000);})
    .then((result) => console.log(result))
    .catch((error) => console.log(error));
    console.log("still going on...");
}
test();
console.log("end.");

输出:

start
going on...
end.
promise value
still going on...
javascript async-await promise
1个回答
0
投票
  1. then
    catch
    创造新的承诺。
  2. 你等待捕获的承诺。
  3. 既然你最初的承诺已经解决,那么 then 的回调就会被执行,然后 then 和 catch 的承诺会在链中解决
  4. 然后
    console.log()
    await
  5. 之后执行
© www.soinside.com 2019 - 2024. All rights reserved.