【发布时间】:2020-10-21 17:17:20
【问题描述】:
如果我声明如下函数:
function a(){
//do something
}
如果我用a() 执行它,它会被放到调用堆栈的顶部,并在完成时弹出。当函数在调用栈中时,主线程被阻塞并且不能做其他事情,直到调用栈为空。
但是 async 函数究竟会发生什么?
如果我这样做:
async function b() {
//do something
}
函数返回一个promise并且不会阻塞主线程。这是否意味着这个函数被传递给 Web API 而不是调用堆栈?然后在完成后传递给回调队列,然后传递给调用栈,这样我们就可以执行回调函数了?
b.then(function() {
//do something after finish
})
【问题讨论】:
-
您所说的“被传递给 Web API”是什么意思?
-
@Bergi 我的意思是承诺被传递给微任务而不是 Web API。 (我希望是正确的)所以我认为异步函数也被传递给微任务队列?
-
不,我猜“web API”并不是你想的那样。不,虽然 Promise 回调是通过任务队列调度,但当它们被执行时,它们仍然被放在调用堆栈中。
标签: javascript asynchronous async-await