例子:
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并抛出错误会更好吗?帮助!谢谢!
新的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] 删除。
我来说两句