JS Promise和事件循环执行

时间:2018-01-25 06:37:46

标签: javascript es6-promise

我是javascript的新手,来自固件/嵌入式系统/ RTOS背景。我不理解JS promise的上下文切换的概念。

对于这个脚本:

setTimeout(() => { console.log("Hello"); }, 3000);

我可以理解回调是在事件循环任务中注册的,脚本一直持续到完成并退出。事件循环运行并执行任何到期的任务/回调。

对于这个脚本:

var pr = new Promise(function(resolve, reject) {
    setTimeout(() => { resolve() }, 3000);
});
pr().then(() => { 
    console.log("Hello"); 
});

是否意味着脚本将运行pr(),退出脚本,运行事件循环。一旦事件循环执行回调(调用resolve()),JS将再次将上下文切换到脚本,并运行then()子句中的任何内容?

或者脚本将运行直到完成,但then()子句在调用resolve()时在事件队列中注册为回调。然后事件队列将执行then()子句?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

第二个,而不是。 Promises are just an abstraction atop callbacks,这里没有任何魔力。

脚本运行直到完成,创建承诺并调用setTimeout(在计时器上安装其回调)并调用then(在承诺上安装其回调)。然后事件循环将前进并运行超时回调,该回调调用resolve,这反过来导致将执行promise回调。