![](/img/trans.png)
[英]Bluebird.JS Promise: new Promise(function (resolve, reject){}) vs Promise.try(function(){})
[英]Bluebird Promise: Is is possible to have multiple reject() in new Promise(function (resolve, reject)?
例:
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功能。
一個諾言是一種單向狀態機。 一旦由於某種原因被拒絕,它將不會再次更改其狀態。
我正在使用藍鳥。 以上可以嗎? 這是不好的做法嗎?
在同一個Promise上多次調用reject()
並不是一個錯誤,但是只有第一個對reject()
調用會被記錄下來,這是Promise中拒絕的原因。 隨后為相同的諾言而reject()
調用將被忽略。
如果您知道函數已經完成了需要做的事情,並且調用了reject()
並且該函數中不需要執行其他代碼,那么不好的做法就是讓其余代碼繼續執行。 取決於該代碼是什么,它可能不會造成任何危害,但是最好在完成后return
。
另外,如果它在第一條語句中拒絕,為什么“語句2”仍然打印出來? 如果“被拒絕”,我想返回,該怎么辦?
調用reject()
不會阻止函數執行。 它只是改變了承諾的狀態。 您的函數仍然繼續執行,然后在完成函數后,將觸發promise的.then()
處理函數。 如果在調用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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.