2022年9月19日 星期一

關於 Promise 的 any()

 關於 Promise 的 any()

前言

  最近發現 Promise 還有個 any() ,抽個空作個學習,在此做個紀錄。


內容

  範例如下

function promise(num, time = 50) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(`num:${ num } is done`);
      (num>0) ? resolve(`value:${num}, 成功`) : reject(`value:${num},失敗`);
    }, time);
  });
}
Promise.any([promise(0,5000), promise(2,500), promise(3, 1000)])
  .then(res => {
    console.log(res);
  })
  .catch(res =>{
    console.log(res);
  
  })
  .finally(() => {
    console.log(`It's done`);
    console.log(`finally block `);
  });
// "num:2 is done"
// "value:2, 成功"
// "It's done"
// "finally block "
// "num:3 is done"
// "num:0 is done"


Promise.any() 一樣是一次啟動多個 Promise ,但跟之前的 Promise.all() 或 Promise.allSettled() 不一樣的是它只要其中一個 Promise 進入 resolve() 或 reject() 就開始喚起 then() 或 catch() ,範例的" num:2" 會最快完成,所以 500ms 就進入了 then() ,之後就 finally() ,但可以看到跑完 finally() 後," num:0" 與 " num:3" 還是會繼續跑,但不會進到任何一個 then() 或 catch()。


參考資料

[ developer.mozilla.org ] Promise.any()

沒有留言:

張貼留言