Javascript 承诺和异步/等待的调用堆栈是什么样子的?
我最近看了这段视频:我试图找到一个类似的关于承诺的解释。特别是在节点中 我可能错了,但我的印象是承诺放在微任务队列上,只有当调用堆栈为空时才会处理微任务队列,一旦事件循环开始处理微任务队列,它就会处理它,直到队列为空Javascript 承诺和异步/等待的调用堆栈是什么样子的?,javascript,node.js,callstack,event-loop,Javascript,Node.js,Callstack,Event Loop,我最近看了这段视频:我试图找到一个类似的关于承诺的解释。特别是在节点中 我可能错了,但我的印象是承诺放在微任务队列上,只有当调用堆栈为空时才会处理微任务队列,一旦事件循环开始处理微任务队列,它就会处理它,直到队列为空 const sleep=(ms)=>newpromise((res)=>{ 设置超时(分辨率,毫秒) }); const doTask1=(workerId)=>sleep(1000)。然后(()=>console.log(`[${workerId}]完成了任务1`); cons
const sleep=(ms)=>newpromise((res)=>{
设置超时(分辨率,毫秒)
});
const doTask1=(workerId)=>sleep(1000)。然后(()=>console.log(`[${workerId}]完成了任务1`);
const doTask2=(workerId)=>sleep(5000)。然后(()=>console.log(`[${workerId}]完成了任务2`);
常量工作者=异步(工作者ID)=>{
console.log(`[${workerId}]正在开始工作`)
等待doTask1(workerId);
等待doTask2(workerId);
log(`[${workerId}]已完成所有任务`);
};
工人(‘A’);
工人(‘B’)
首先,await
应用于在该调用之后返回dotask1()
的承诺,sleep
、setTimeout
,然后的调用堆栈在考虑await
之前是正常的。是的,await
的工作原理类似于生成器中的yield
,因此调用堆栈从异步函数
调用返回一个promise值。然后,main
继续调用worker('B')
等,直到所有同步代码都完成执行-这就是输入微任务和事件队列的时间。在此处运行代码查看eventloop的行为[@ShubhamTiwari在运行时出错首先,await
应用于dotask1()的承诺
返回,在该调用之后,sleep
、setTimeout
和then
的调用堆栈在考虑wait
之前是正常的。是的,wait
的工作原理类似于生成器中的yield
,因此调用堆栈从异步函数
调用返回一个承诺值。然后,main
继续调用worker('B')
等,直到所有同步代码都完成执行-这就是输入微任务和事件队列的时间。在此处运行代码查看eventloop[@ShubhamTiwari在运行时出错的行为