成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Promise.all 的異常處理,我希望大家一定要了解一下!

開發 前端
Promise.all還是很好用的,但是問題來了,其中有一個錯誤的話,就只會輸出這個失敗的值,而忽略了其他成功的值,那咋辦呢?

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心

背景

咱們在開發中,大多數時間都是一個異步操作一個異步操作去執行的,但是有一些特殊情況,需要一股腦去執行多個異步操作,比如:

  • 多表單校驗:只有所有表單都校驗通過才能提交
  • 多接口請求:只有所有接口都請求成功才能進行下一步操作

這時候就可以用到Promise.all這個方法了

Promise.all

基本特性

簡單說說這個方法的使用或特性吧:

  • 接收一個 Promise 數組,執行結果返回一個新的 Promise
  • 所有 Promise 都成功的時候,返回的 Promise 才是成功
  • 要是有一個 Promise 失敗,則返回的 Promise 是失敗

基本使用

// 模擬異步操作
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' ]

Promise.allSettled

其實在ES2020中,JavaScript提供了一個新語法Promise.allSettled,他能直接完成我們上面所做的處理:

  • 接收一個 Promise 數組,執行結果返回一個成功的 Promise
  • 返回 Promise 狀態為成功
  • 返回 Promise 的值是一個數組
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' }
// ]

責任編輯:武曉燕 來源: 前端之神
相關推薦

2020-12-03 10:17:25

Kubernetes架構微服務

2021-03-15 12:00:19

Kubernetes微服務架構

2016-08-12 22:27:32

大數據小趨勢

2018-07-02 08:57:27

碼農業務程序員

2022-08-31 22:50:13

JavaScript函數JSON

2020-12-02 10:53:39

區塊鏈技術

2022-06-13 09:26:41

Promise前端代碼

2023-10-04 07:25:59

JavaScriptpromises

2025-03-07 07:20:00

JavaScript異步編程Promise

2016-12-27 13:10:37

2025-02-17 16:45:40

2020-02-10 14:26:10

GitHub代碼倉庫

2019-11-07 15:20:07

JavaCollectorsteeing

2020-12-10 08:44:35

WebSocket輪詢Comet

2021-11-19 10:25:23

MySQL數據庫架構

2018-04-02 14:21:43

互聯網物聯網

2023-09-26 07:43:22

工具骨架屏頁面

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2021-07-06 14:56:20

深度學習編程人工智能

2020-03-01 17:53:38

Excel大數據微軟
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 新av在线| 亚洲免费在线 | 免费观看a级毛片在线播放 黄网站免费入口 | 九九色九九 | 精品九九 | 国产精品久久久久久久久图文区 | 久久久久久国产精品免费 | 一级毛片中国 | 国产精品九九九 | 久久久久www | 99久久婷婷国产综合精品首页 | 亚欧精品 | 在线播放国产一区二区三区 | 国产精品久久二区 | 人人艹人人 | 好好的日在线视频 | 在线观看国产视频 | 国产一级电影在线 | 欧美日韩久久久 | 国产一区二区三区四区区 | 亚洲成人网在线 | 国产精品日韩一区二区 | 91精品久久久久久久久久 | 午夜成人免费视频 | 一区二区三区精品在线 | 91丨九色丨国产在线 | 欧美一区二区三区 | 91精品国产91久久久 | 黑人巨大精品欧美一区二区一视频 | 日韩精品中文字幕一区二区三区 | 人人色视频 | 成人国内精品久久久久一区 | 91av视频在线观看 | 夜夜草视频 | 在线日韩欧美 | 一区二区三区免费 | 99精品久久 | 欧美三级三级三级爽爽爽 | 日本一区精品 | 在线看h| 欧美不卡一区二区三区 |