Ben*_*aum 31 javascript node.js promise es6-promise
NodeJS 0.11以及io.js和Node 0.12分支都附带本机承诺.
本机承诺有一个.then总是在未来事件循环周期上执行的方法.
到目前为止setImmediate,自从我从nextTick切换以来,我一直在使用事件循环到事件循环的下一次迭代:
setImmediate(deferThisToNextTick); // My NodeJS 0.10 code
process.nextTick(deferThisToNextTick); // My NodeJS 0.8 code
Run Code Online (Sandbox Code Playgroud)
因为我们现在有了一种新方法:
Promise.resolve().then(deferThisToNextTick);
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个?此外 - 对于在事件循环之前或之后运行的代码,它的Promise.resolve.then作用是什么setImmediate样的nextTick?
vku*_*kin 25
使用Promise.resolve().then没有优势nextTick.它运行在同一个队列中,但具有稍高的优先级,也就是说,promise处理程序可以阻止下一个tick回调运行,相反是不可能的.此行为是一个实现细节,不应该依赖.
Promise.resolve().then 显然是慢的(很多,我认为),因为它创造了两个将被抛弃的承诺.
您可以在此处找到大量的实施信息:https://github.com/joyent/node/pull/8325
最重要的部分:Promise.resolve().then喜欢nextTick和不喜欢setImmediate.使用它setImmediate可以大大改变您的代码行为.
我不会回答关于技术性问题的粗体部分,而只回答问题
我应该使用哪个?
Promise.resolve().then()除非您对异步执行函数的结果感兴趣,否则我认为没有任何理由可以使用.当然,如果你是,那么这将是远比回调地狱处理或作出卓越new Promise的setTimeout或nextTick.
还有第二个技术差异,比时间更重要:承诺可以吞下例外.你可能不想要的.因此,就像@vkurchatkin所提到的那样,不要创造承诺只是为了抛弃它们.不仅因为它速度较慢,而且因为它使您的代码可读性降低,而且您的应用程序更容易出错.
| 归档时间: |
|
| 查看次数: |
8472 次 |
| 最近记录: |