Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺和异步/等待的调用堆栈是什么样子的?_Javascript_Node.js_Callstack_Event Loop - Fatal编程技术网

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在运行时出错的行为