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(使用前将#替换为@)