蓝鸟承诺:新Promise中有多个reject()可以(函数(解析,拒绝)吗?

时间:2015-08-21 19:44:39

标签: javascript promise bluebird

示例:

function multiRejectExample(){ 
  return new Promise(function (resolve, reject){
    if(statement){
      console.log('statement 1');
      reject(throw new Error('error'));
    }
   if(statement){
     console.log('statement 2');
     reject(throw new Error('error')); 
   }
  });
}

我正在使用蓝鸟。上面还可以吗?这是不好的做法吗?

另外,如果它在第一个声明中拒绝,为什么“声明2”仍然打印出来?如果'拒绝',我想返回,我该怎么做?

使用Promise.try然后抛出错误会更好吗?救命!谢谢!

1 个答案:

答案 0 :(得分:4)

  

新Promise中可能有多个reject()(函数   (解决,拒绝)?

是的,您可以在多个地方为{1}}致电承诺。这对于Promises来说通常是正确的,而不仅仅是Bluebird的功能。

承诺是一种单向状态机。一旦被理由拒绝,它就不会再次改变它的状态。

  

我使用蓝鸟。上面还可以吗?这是不好的做法吗?

在同一承诺上多次拨打reject()并不是一个错误,但只会记录对reject()的第一次呼叫,并且是承诺拒绝的原因。

如果你知道你的功能完成了它需要做的事情并调用了reject()并且没有其他代码需要在该函数中执行,那么让其余的代码继续执行是不好的做法。执行。取决于代码是什么,它可能不会造成任何伤害,但是当你完成时只需reject()就是更好的做法。

  

另外,如果它在第一个陈述中拒绝,为什么'陈述2'   还打印出来?如果被拒绝了,我想回来,我该怎么做?

调用reject()不会阻止您的函数执行。它只是改变了承诺的状态。您的函数仍然继续执行,然后在您的函数完成后,将触发承诺的return处理程序。如果您想在致电reject()后不再在函数中执行代码,则可以使用.then()语句。

在您的特定情况下,如果在此之后不再需要运行其他代码,则拒绝后reject()可能会更有意义,但是没有必要:

return

参见示例演示:http://jsfiddle.net/jfriend00/gtq49v9x/

相关问题