NodeJS 0.11以及io.js和Node0.12分支都带有本地承诺。
本机承诺 method,它总是在未来的事件循环循环中执行。
到目前为止,我一直使用setImmediate将事情排队到事件循环的下一次迭代中,自从我switched from nextTick以来
setImmediate(deferThisToNextTick); // My NodeJS 0.10 code
process.nextTick(deferThisToNextTick); // My NodeJS 0.8 code因为我们现在有了一种新的方法来做到这一点:
Promise.resolve().then(deferThisToNextTick); 我该用哪一种?另外,对于在事件循环之前或之后运行的代码,Promise.resolve.then setImmediate 或 nextTick 的行为是否与类似?
发布于 2014-12-25 15:11:15
与Promise.resolve().then相比,使用nextTick没有优势。它运行在相同的队列上,但具有稍高的优先级,也就是说,承诺处理程序可以防止下一个滴答回调运行,相反的情况是不可能的。这种行为是实现细节,不应依赖于此。
Promise.resolve().then显然速度较慢(我认为非常慢),因为它创建了两个将被丢弃的承诺。
您可以在这里找到广泛的实现信息:https://github.com/joyent/node/pull/8325
最重要的部分是:Promise.resolve().then像nextTick而不是setImmediate。使用它代替setImmediate可以极大地改变您的代码行为。
发布于 2017-07-03 04:03:54
Promise.resolve将立即解析(同步),而setImmediate则直接在当前事件执行之后显式地解析。
https://stackoverflow.com/questions/27647742
复制相似问题