示例:
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然后抛出错误会更好吗?救命!谢谢!
答案 0 :(得分:4)
新Promise中可能有多个reject()(函数 (解决,拒绝)?
是的,您可以在多个地方为{1}}致电承诺。这对于Promises来说通常是正确的,而不仅仅是Bluebird的功能。
承诺是一种单向状态机。一旦被理由拒绝,它就不会再次改变它的状态。
我使用蓝鸟。上面还可以吗?这是不好的做法吗?
在同一承诺上多次拨打reject()
并不是一个错误,但只会记录对reject()
的第一次呼叫,并且是承诺拒绝的原因。
如果你知道你的功能完成了它需要做的事情并调用了reject()
并且没有其他代码需要在该函数中执行,那么让其余的代码继续执行是不好的做法。执行。取决于代码是什么,它可能不会造成任何伤害,但是当你完成时只需reject()
就是更好的做法。
另外,如果它在第一个陈述中拒绝,为什么'陈述2' 还打印出来?如果被拒绝了,我想回来,我该怎么做?
调用reject()
不会阻止您的函数执行。它只是改变了承诺的状态。您的函数仍然继续执行,然后在您的函数完成后,将触发承诺的return
处理程序。如果您想在致电reject()
后不再在函数中执行代码,则可以使用.then()
语句。
在您的特定情况下,如果在此之后不再需要运行其他代码,则拒绝后reject()
可能会更有意义,但是没有必要:
return