Promise.any无效?Promise.any在部分环境下并不支持,通过Promise.all实现Promise.any

先看一下 Prmose.any 介绍

只要有一个Promise状态变为fullfilled,则状态变为fullfilled
只有所有的Promise状态变为rejected,则状态变为rejected

再看一下 Prmose.all 介绍

只要有一个Promise状态变为rejected,则状态变为rejected
只有所有的Promise状态变为fullfilled,则状态变为fullfilled

所以可以通过 Prmose.all 实现 Prmose.any, 取反就行了

Talk is cheap, show you the code.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import axios from 'axios'
const urls = [url1, url2, url3]

const ajaxUrls = urls.map(url => {
return new Promise((resolve, reject) => {
axios
.get(url)
.then(res => reject(res))
.catch(err => resolve(err))
})
})

Promise
.all(ajaxUrls)
.then(err => {
// 都 ajax 都 resolve 时,即都 catch 的时候
// 错误处理的代码
})
.catch(res => {
// 只要有一个 ajax reject 时,即 then 的时候执
// 处理 正常数据
})