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