【发布时间】:2015-02-23 05:04:52
【问题描述】:
NodeJS 0.11 以及 io.js 和 Node 0.12 分支都附带原生承诺。
Native 承诺 have a .then method 始终在未来的事件循环周期中执行。
到目前为止,自从我 switched from nextTick 以来,我一直在使用 setImmediate 将事情排队到事件循环的下一次迭代:
setImmediate(deferThisToNextTick); // My NodeJS 0.10 code
process.nextTick(deferThisToNextTick); // My NodeJS 0.8 code
因为我们现在有了一种新的方法来做到这一点:
Promise.resolve().then(deferThisToNextTick);
我应该使用哪个?另外 - 关于在事件循环之前或之后运行的代码,Promise.resolve.then 是否像 setImmediate 或 nextTick 一样?
【问题讨论】:
-
分享一些研究:在 Chromium 中 - 一个承诺将一个微任务排入队列,这里运行微任务 github.com/yoavweiss/Blink/blob/… 当脚本到达或检查并且没有脚本运行时调用这里:github.com/yoavweiss/Blink/blob/…
-
经过验证的微任务在 nextTick 队列上运行:github.com/joyent/node/blob/v0.12/src/node.js#L326-L329,将等待几个小时,看看 v8 或节点团队成员是否愿意澄清,如果没有,我会写下我的答案。跨度>
标签: javascript node.js promise es6-promise