在使用q(promises)模块的Nodejs中,then()返回的值是多less?

我不是在问诺言的实现价值。

在这里我正在询问then()函数的返回值。 我所关心的具体事情是根据条件build立承诺清单,例如:

 function operationThatReturnsPromise() { var p = q.resolve({ prop1 : value1 }) .then(function(ctx) {.... return ctx;}); if (condition1) { // which usage is required or preferred? // 1. p = p.then() ? p = p.then(function(ctx) { ..... return ctx; } ); // 2. p.then() ? p.then(function(ctx) {... return ctx; }); } return p; } 

他们是否等同? Mozilla的文档说

一个新的承诺被返回,其状态依赖于这个承诺和提供的callback函数演变。

Mozilla文档剪辑

这似乎表明前者(选项1)是首选。 任何指导?

你应该总是使用选项1。

承诺是不可改变的。 .then()用callback的(最终)结果返回一个新的promise。

如果你忽视了它的回报价值,你将永远不会等待手术完成,更糟糕的是,任何失败都将被悄无声息地吞噬。

只要做testing,选项2将无法正常工作。 如果你想要一个用ctx解决的promise,你必须返回then(function(ctx) {... return ctx; })的返回值。 使用选项2,这个返回值永远丢失。

顺便说一下,请大家检查Q的基准,并意识到你应该使用蓝鸟,这是我知道的唯一的承诺库,它有非常好的performance。