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

Node.js 在Nodejs中,当使用q(promises)模块时,then()返回的值是多少?,node.js,promise,q,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 preferre

我不是在问承诺的实现价值

这里我询问
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;
}
它们相等吗? 美国

返回一个新的承诺,其状态取决于该承诺和提供的回调函数


这似乎表明前者(选项1)是首选方案。有什么指导吗

您应该始终使用选项1

承诺是不变的
.then()
返回一个带有回调(最终)结果的新承诺


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

只需执行测试,选项2将不起作用。如果希望使用
ctx
解析承诺,则必须返回
的返回值,然后(函数(ctx){…return ctx;})
。使用选项2,此返回值将永远丢失


顺便说一句,请大家检查一下Q的基准测试,并意识到您可能应该使用bluebird,这是我所知道的唯一一个性能非常好的promise库。

值得一提的是,像bluebird或firefox中的native promises这样的promise库不会默默地吞下异常。我看到您的背景是.NET,将
。然后
视为任务的
。继续
,最终返回任务。许多promise库开发人员关心性能。佩特卡只是比其他大多数人更了解它。是的。也许这有点夸张了。