簡體   English   中英

藍鳥承諾:新的Promise(函數(解決,拒絕)中是否可以有多個拒絕()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM