Aun*_*ant 1 javascript async-await
刚开始学习async-await,只是想清楚地了解程序执行流程。
async function A() {
await doSomethingAsync();
doThisNext();
}
A();
B();
C();
Run Code Online (Sandbox Code Playgroud)
鉴于上面的代码片段,假设 B() 目前正在执行。
当 B() 正在执行并且如果 doSomethingAsync() 在那一刻得到解决时,程序执行是否会暂时挂起 B() 以恢复 A() (即;启动 doThisNext() 然后切换回来?
还是会先完成 B()(甚至 C())然后执行 doThisNext()?
还是我误解了整件事?
假设 B 和 C 只是没有异步代码的通用函数。
当 B() 正在执行并且如果 doSomethingAsync() 在那一刻得到解决时,程序执行是否会暂时挂起 B() 以恢复 A() (即;启动 doThisNext() 然后切换回来?
这不是事件循环的工作方式。如果B是同步的,它不会被承诺解析中断。计划在当前承诺解析微队列期间执行。
所以,订单将是
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))
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |