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

时间:2014-05-21 23:27:48

标签: node.js promise q

我不是在问这个承诺的履行价值。

这里我要问的是then()函数的返回值。我关注的具体事情是根据条件构建承诺列表,例如:

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;
}

他们是等同的吗? doc at Mozilla

  

返回一个新的promise,其状态根据此promise和提供的回调函数而发展。

Mozilla doc snip

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

2 个答案:

答案 0 :(得分:1)

您应始终使用选项1。

承诺是不可改变的; .then()返回带有回调(最终)结果的新承诺。

如果忽略其返回值,您将永远不会等待操作完成,更糟糕的是,任何失败都会被默默地吞没。

答案 1 :(得分:0)

只是做测试,选项2不起作用。如果您想要使用ctx解析的承诺,则必须返回then(function(ctx) {... return ctx; })的返回值。使用选项2,此返回值将永远丢失。

顺便说一下,请大家检查Q的基准,并意识到你应该使用bluebird,这是我知道的唯一一款性能非常好的诺言库。