javascript - JS Promise 和事件循环执行

标签 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() 子句中的任何内容?

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

感谢您的帮助

最佳答案

相反,是第二个。 Promises are just an abstraction atop callbacks ,这里没有发生任何魔法。

脚本运行直至完成,创建 Promise 并调用 setTimeout (在计时器上安装其回调)并调用 then (在 Promise 上安装其回调) 。然后事件循环将前进并运行超时回调,该回调调用 resolve ,进而导致执行 Promise 回调。

关于javascript - JS Promise 和事件循环执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48436985/

相关文章:

Node.js - 使用 Promise.all() 加载并执行多个函数

promise - Javascript Promise 解析方法在控制台中打印。如何?

javascript - 使用jquery获取多个选择框的值

javascript - React Virtual Dom 中涉及三棵树,还是只有两棵?

javascript - 从快速服务器传递变量以 react 应用程序

javascript - 不稳定的 jQuery 可拖动行为

javascript - 返回值而不是 promise [停止嵌套的延迟 promise ]

Angular:从 FileReader 返回 Observable/ES6 Promise

javascript - 尝试在 Promise Nodejs 中获取时没有解决任何问题

javascript - 如何访问 Meteor 辅助函数中的 URL 参数?