美文网首页
Promise.all Promise.race Promise

Promise.all Promise.race Promise

作者: 哼_ | 来源:发表于2022-03-30 14:27 被阅读0次

闲来无事,研究一下
总结一篇,分享大家
如有错误,欢迎指正
发现问题,麻烦轻喷

promise 是为了解决异步请求, 返回结果无限callback的问题.
使用promise 可以让代码看起来更简洁,清晰

 // Promise.all([p1,p2,p3])  将三个promise请求 打包,返回一个整体的数组
    // 示例: 
    let p11 = Promise.resolve('aaaa');
    // let p22 = Promise.resolve('bbbb');
    let p22 = Promise.reject('bbbb');
    let p33 = Promise.resolve('cccc')

    let all = Promise.all([p11, p22, p33]).then(res => {
        console.log(res, 'all=======') // ["aaaa", "bbbb","cccc"]
      // promise.all() 必须保证p11, p22, p33 都是resolve 状态的情况下,才能执行成功
     //  使用数组的解构赋值
        let [res1, res2, res3] = res
        console.log(res1, res2, res3) // aaaa, bbbb, cccc
    }).catch(err => {
        console.log(err, 'all---------err-----')
    })
    //如果promise.all 碰到了一个reject, 就会拒绝执行, 抛出错误. 


    // promise.all 必须确保所有的状态都是resolve 状态,都是成功状态, 如果有一个reject, promise.all(),就会执行catch

    // promise.race race 是赛跑,谁返回的快, 就返回谁, 只会返回一个.不管对错, 对的执行then, 错误执行catch

    // promise.allSettled 遇到reject,也会执行then完毕,返回json 数组,返回状态和value

    // 示例: allSettled
    let allSettled = Promise.allSettled([p11, p22, p33]).then(res => {
        console.log(res, 'allSettled=======')
    }).catch(err => {
        console.log(err, 'allSettled-------err------')
    })
allSettled 遇到reject 返回结果
let p44 = new Promise(function (resolve) {
        setTimeout(() => {
            resolve('p44-resolve')
        }, 500)
    })
    let p55 = new Promise(resolve => {
        setTimeout(() => {
            resolve('p55-resolve')
        }, 400)
    })
    let p66 = new Promise((resolve, reject) => {
        setTimeout(() => {
            reject('p66-reject')
        }, 100)
    })
    let race = Promise.race([p44, p55, p66]).then(res => {
        console.log(res, 'race=======')
    }).catch(err => {
        console.log(err, 'race-------err------')
    })

p66-reject race======= // 结果
这个就证明了 race 是通过返回时间来拦截结果的, 执行快的先返回,并且只返回一次,正确的走then, 错误的走catch

总结

  • all. 要求三个promisee 都是resolve 状态.并且会返回一个数组. 如果其中一个promise 是reject 状态, 就会执行catch.
  • race, 会执行反应最迅速的一个promise. 不管结果是then 还是catch
  • allSettled. 会返回所有promise的状态.

以上

相关文章

网友评论

      本文标题:Promise.all Promise.race Promise

      本文链接:https://www.haomeiwen.com/subject/xyiijrtx.html