Promise實例的any方法


Promise.any()方法,該方法接受一組Promise實例作為參數,包裝成一個新的Promise實例返回,只要參數實例有一個變成fulfilled狀態,包裝實例就會變成fulfilled狀態。如果所有參數實例都會變成rejected狀態,包裝實例就會變成rejected狀態。

Promise.any( )跟Promise.race( )方法很像,只有一點不同,就是不會因為某個Promise變成rejected狀態而結束。

 

 

const promises = [
  fetch('/endpoint-a').then(() => 'a'),
  fetch('/endpoint-b').then(() => 'b'),
  fetch('/endpoint-c').then(() => 'c'),
];

try {
  const first = await Promise.any(promises);
  console.log(first);
} catch (error) {
  console.log(error);
}

     上邊代碼中,Promise.any( )方法的參數數組包含三個Promise操作,其中只要有一個變成fulfilled,Promise.any( )返回的Promise對象就變成fulfilled.如果所有三個操作都變成rejected,那么await命令就會拋出錯誤。

     Promise.any( )拋出的錯誤,不是一個一般的錯誤,而是一個AggregateError 實例。它相當於一個數組,每個成員對應一個被rejected的操作所拋出的錯我。

 

下面是個AggregateError的實現示例

new AggregateError() extends Array -> AggregateError

const err = new AggregateError();
err.push(new Error("first error"));
err.push(new Error("second error"));
throw err;

 

 捕捉錯誤

var resolved = Promise.resolve(42);
var rejected = Promise.reject(-1);
var alsoRejected = Promise.reject(Infinity);

Promise.any([resolved, rejected, alsoRejected]).then(function (result) {
  console.log(result); // 42
});

Promise.any([rejected, alsoRejected]).catch(function (results) {
  console.log(results); // [-1, Infinity]
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM