一尘不染

Promise.resolve()。then vs setImmediate vs nextTick

node.js

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

本机承诺具有.then始终在未来事件循环周期中执行方法

setImmediate从我从nextTick切换到现在,到目前为止,我一直在将事情排队到事件循环的下一个迭代:

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

由于我们现在有了一种新的方法来执行此操作:

Promise.resolve().then(deferThisToNextTick);

我应该使用哪个?也-
Promise.resolve.thensetImmediate或类似nextTick至于事件循环之前或之后运行的代码?


阅读 296

收藏
2020-07-07

共1个答案

一尘不染

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

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

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

最重要的部分:Promise.resolve().then喜欢nextTick和不喜欢setImmediate。使用n代替setImmediate可以大大改变您的代码行为。

2020-07-07