当前位置: 首页 > 面试题库 >

Promise.resolve()。then vs setImmediate vs nextTick

轩辕天佑
2023-03-14
问题内容

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至于事件循环之前或之后运行的代码?


问题答案:

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

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

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

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



 类似资料:
  • 以下两者之间的区别是什么: 这是: 我问,因为我得到不同的行为使用Angular和$超文本传输协议服务与链接。代码有点太多,因此首先是上面的例子。

  • 我很难得到一个Jest Mock实现来返回promise数据。在特定上下文中解析()。 在我的节点中。js代码,我有一个结构,将所有API调用代码放在一个类(API)中,将所有业务逻辑放在另一个类(Repo)中。当您实例化Repo时,它会为自己创建一个Api类的实例: 我正在尝试在Repo级别测试一个函数,并模拟Api调用,以便在测试期间不进行任何查询。 当我执行函数,返回true,但它返回的值是

相关阅读

相关文章

相关问答