gpt4 book ai didi

javascript - javascript "await"是否会立即暂停它正在做的任何事情,并在 promise 得到解决后恢复异步功能?

转载 作者:行者123 更新时间:2023-12-01 21:44:58 25 4
gpt4 key购买 nike

刚开始学习async-await,只想清楚地了解程序执行流程。

async function A() {
await doSomethingAsync();
doThisNext();
}

A();
B();
C();

鉴于上面的代码片段,假设此时正在执行 B()。

  1. 当 B() 正在执行时,如果 doSomethingAsync() 在那一刻得到解决,程序执行是否会暂时挂起 B() 以恢复 A()(即启动 doThisNext() 然后切换回来?

  2. 还是先完成B()(甚至C())再执行doThisNext()?

  3. 还是我误解了整件事?

假设 B 和 C 只是没有异步代码的通用函数。

最佳答案

While B() is executing and if doSomethingAsync() gets resolved right at that moment, will the programing execution suspends B() temporarily to resume A() (ie; start doThisNext() and then switch back?

这不是事件循环的工作方式。如果 B 是同步的,它就不会被 promise 解析打断。计划在当前 promise 解决微队列期间执行。

所以,顺序是

  1. A开始并暂停
  2. B结束
  3. C 结束
  4. 一个恢复和结束

A();
B();
C();



async function A() {
console.log('A start');
await delay(0);
// or even
// await Promise.resolve('done')
console.log('A end')
}

function B() {
console.log('B')
}

function C() {
console.log('C')
}

function delay(ms) {
return new Promise(r => setTimeout(r, ms))
}

关于javascript - javascript "await"是否会立即暂停它正在做的任何事情,并在 promise 得到解决后恢复异步功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60866137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com