大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心
咱們在開發中,大多數時間都是一個異步操作一個異步操作去執行的,但是有一些特殊情況,需要一股腦去執行多個異步操作,比如:
這時候就可以用到Promise.all這個方法了
簡單說說這個方法的使用或特性吧:
// 模擬異步操作const request = (delay, flag = true) => { return new Promise((resolve, reject) => { setTimeout(() => { if (flag) { resolve(`成功了${delay}`) } else { reject(`失敗了${delay}`) } }, delay) })}const fun = async (promises) => { Promise.all(promises) .then(res => { console.log('res', res) }) .catch(error => { console.log('error', error) })}fun([request(1000), request(500)])// res [ '成功了1000', '成功了500' ]fun([request(1000), request(500, false)])// error 失敗了500
Promise.all還是很好用的,但是問題來了,其中有一個錯誤的話,就只會輸出這個失敗的值,而忽略了其他成功的值,那咋辦呢?我們需要自己去收集才行:
const fun = async (promises) => { Promise.all( promises.map(promise => { return promise.catch(err => err) }) ) .then(res => { console.log('res', res) })}fun([request(1000), request(500, false)])// res [ '成功了1000', '失敗了500' ]
其實在ES2020中,JavaScript提供了一個新語法Promise.allSettled,他能直接完成我們上面所做的處理:
const fun = async (promises) => { Promise.allSettled(promises) .then(res => { console.log('res', res) })}fun([request(1000), request(500, false)])// res [// { status: 'fulfilled', value: '成功了1000' },// { status: 'rejected', reason: '失敗了500' }// ]
本文鏈接:http://www.www897cc.com/showinfo-26-80519-0.htmlPromise.all 的異常處理,我希望大家一定要了解一下!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com