promise.all any race简易实现

Promise.all() :任意一个 promise 被 reject ,就会立即被 reject ,并且 reject 的是第一个抛出的错误信息,只有所有的 promise 都 resolve 时才会 resolve 所有的结果
Promise.any() :任意一个 promise 被 resolve ,就会立即被 resolve ,并且 resolve 的是第一个正确结果,只有所有的 promise 都 reject 时才会 reject 所有的失败信息
Promise.race() :最快的那个 Promise的执行结果
1、Promise.all

const all = (arr) => {
    let count = 0
    let result = []
    return new Promise((resolve, reject) => {
        arr.forEach((item,index) => {
            Promise.resolve(item).then(res=>{
                result[index]=res
                count += 1
                count == arr.length && resolve(result)
            }).catch(reject)
        });
    })
}

2、Promise.any

const promises = [
    Promise.reject('ERROR A'),
    Promise.reject('ERROR B'),
    Promise.resolve('result2'),
]
const any = (arr) => {
    let count = 0
    let err = []
    return new Promise((resolve, reject) => {
        arr.forEach(item => {
            Promise.resolve(item).then(resolve).catch((error) => {
                err.push(error)
                count += 1
                if (count == arr.length) reject(err)
            })
        });
    })
}
any(promises).then((value) => {
    console.log('value: ', value)
}).catch((err) => {
    console.log('err: ', err)
})


3、Promise.race()

const race=(arr)=>{
    return new Promise((resolve,reject)=>{
        arr.forEach(item=>{
            Promise.resolve(item).then(resolve).catch(reject)
        })
    })
}
posted @ 2023-06-07 13:16  年轻浅识  阅读(53)  评论(0)    收藏  举报