首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点承诺如何介于‘`nextTick`’和‘`setImmediate`’之间?

节点承诺如何介于‘`nextTick`’和‘`setImmediate`’之间?
EN

Stack Overflow用户
提问于 2015-09-08 09:19:15
回答 1查看 1.2K关注 0票数 4

我的应用程序中有一个奇怪的计时错误,它来自于从“蓝知更鸟”到“本地承诺”。我修复了它,但我留下了这个奇怪的地方:本土的承诺似乎在nextTicksetImmediate之间摇摆--怎么回事?这应该发生吗?在这些问题上,承诺将走向何方?

代码语言:javascript
复制
~function(){
  setTimeout            (console.log.bind(console, 'timeout A'));
  process.nextTick      (console.log.bind(console, 'nextTick A'));
  setImmediate          (console.log.bind(console, 'setImmediate A'));
  Promise.resolve().then(console.log.bind(console, 'promise'));
  process.nextTick      (console.log.bind(console, 'nextTick B'));
  setImmediate          (console.log.bind(console, 'setImmediate B'));
  setTimeout            (console.log.bind(console, 'timeout B'));
}();

本地产量:

代码语言:javascript
复制
nextTick A
nextTick B
promise undefined
setImmediate A
setImmediate B
timeout A
timeout B

蓝鸟产量:

代码语言:javascript
复制
nextTick A
nextTick B
setImmediate A
promise undefined
setImmediate B
timeout A
timeout B
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 16:06:48

本土的承诺似乎在nextTick和setImmediate之间摇摆--怎么做?这应该发生吗?在这些问题上,承诺将走向何方?

是的,承诺在微任务nextTick队列之后和任何任务(如setImmediate)执行之前运行。

这是他们的预期行为,以及我们期望他们在NodeJS中所做的事情。这是决定在这里,你可以读到它,这里

蓝鸟的不同行为

蓝知更鸟的行为早于本机承诺,蓝鸟3.0使用nextTick和微任务语义进行调度。蓝鸟允许您使用Promise.setSchedulernextTick作为调度器(而不是setImmediate)手动覆盖此行为。

您可以看到这里的代码

代码语言:javascript
复制
GlobalSetImmediate.call(global, fn)

请注意,无论如何,您的代码不应该依赖这些行为。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32453877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档