Promise.resolve().then 与 setImmediate 与 nextTick

2023-12-29

NodeJS 0.11 以及 io.js 和 Node 0.12 分支都带有原生 Promise。

原生承诺have a .then method https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise它总是在未来的事件循环周期中执行。

到目前为止我一直在使用setImmediate自从我以来,将事物排队到事件循环的下一次迭代从 nextTick 切换而来 https://stackoverflow.com/questions/15349733/setimmediate-vs-nexttick:

setImmediate(deferThisToNextTick); // My NodeJS 0.10 code
process.nextTick(deferThisToNextTick); // My NodeJS 0.8 code

因为我们现在有一种新方法可以做到这一点:

Promise.resolve().then(deferThisToNextTick); 

我应该使用哪个?还 -does Promise.resolve.then表现得像setImmediate或者喜欢nextTick关于事件循环之前或之后运行的代码?


Using Promise.resolve().then没有什么优势nextTick。它在同一个队列上运行,但具有稍高的优先级,也就是说,Promise 处理程序可以阻止下一个滴答回调运行,反之则不可能。此行为是一个实现细节,不应依赖。

Promise.resolve().then显然很慢(我认为慢很多),因为它创建了两个将被丢弃的承诺。

您可以在这里找到广泛的实施信息:https://github.com/joyent/node/pull/8325 https://github.com/joyent/node/pull/8325

最重要的部分:Promise.resolve().then就好像nextTick不喜欢setImmediate。用它代替setImmediate可以极大地改变你的代码行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Promise.resolve().then 与 setImmediate 与 nextTick 的相关文章

随机推荐