使用Promise.resolve().then没有优势nextTick。它在相同的队列上运行,但是具有更高的优先级,也就是说,promise处理程序可以阻止下一个滴答回调的运行,相反则不可能。此行为是实现细节,不应依赖。
Promise.resolve().then 显然要慢一些(我认为很多),因为它创建了两个被抛弃的承诺。
您可以在此处找到广泛的实施信息:https ://github.com/joyent/node/pull/8325
最重要的部分:Promise.resolve().then喜欢nextTick和不喜欢setImmediate。使用n代替setImmediate可以大大改变您的代码行为。
解决方法NodeJS 0.11以及io.js和Node 0.12分支都带有本机Promise。
本机承诺具有.then始终在未来事件循环周期中执行的方法。
setImmediate从我从nextTick切换到现在,到目前为止,我一直在将事情排队到事件循环的下一个迭代:
setImmediate(deferThisToNextTick); // My NodeJS 0.10 codeprocess.nextTick(deferThisToNextTick); // My NodeJS 0.8 code
由于我们现在有了一种新的方法来执行此操作:
Promise.resolve().then(deferThisToNextTick);
我应该使用哪个?也-并Promise.resolve.then像setImmediate或类似nextTick至于事件循环之前或之后运行的代码?