關於 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()。
沒有留言:
張貼留言