蓝鸟承诺:新的Promise(函数(解决,拒绝)中是否可以有多个拒绝()?

esanz91

例子:

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并抛出错误会更好吗?帮助!谢谢!

jfriend00

新的Promise(函数(解析,拒绝)中是否可以有多个拒绝()?

是的,您可以在多个地方提出reject()承诺。对于Promises,这通常是正确的,而不仅仅是Bluebird功能。

一个诺言是一种单向状态机。一旦由于某种原因被拒绝,它将不会再次更改其状态。

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

reject()在同一个诺言中多次调用是没有错误的,但是只会reject()记录对的第一个调用,这是诺言被拒绝的原因。随后reject()对相同诺言的调用将被忽略。

如果您知道函数已完成需要执行的工作并已被调用,reject()并且无需在该函数中执行其他代码,则不好的做法是仅让其余代码继续执行。取决于该代码是什么,它可能不会造成任何危害,但最好return在完成后再做。

另外,如果它在第一条语句中拒绝,为什么“语句2”仍然打印出来?如果“被拒绝”,我想返回,该怎么办?

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


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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章