关于javascript:ES11的PromiseallSettled

6次阅读

共计 1320 个字符,预计需要花费 4 分钟才能阅读完成。

小编最近因为一些本人的问题,没有更新文章。明天刚好有一点精力头,特意来更新一下,明天和大家一起探讨的是 Promise 对象中的 allSettled 办法,次要是为了解决屡次异步申请的时候,中途呈现失败的痛点解决。
在之前的文章中,小编更新的 Promise.all 办法,这个次要是为了优化屡次申请的状况,能够写成这样。

Promise.all([
    Promise.resolve({
        code:200,
        data:[1,2,3]
    }),
    Promise.resolve({
        code:200,
        data:[4,5,6]
    }),
    Promise.resolve({
        code:200,
        data:[7,8,9]
    }),

]).then(res => {console.log(res)
    console.log("胜利")
}).catch(err => {console.log(err)
    console.log("失败")
})  // [{code:200,data:[1,2,3]},{code:200,data:[4,5,6]},{code:200,data:[7,8,9]}]  胜利 

用这个办法的时候,每个参数都是 Promise 对象,如果每一次申请都胜利的时候,痛点并没有浮现那么显著,当两头有一次申请失败或者异样的时候,就会这样

Promise.all([
    Promise.resolve({
        code:200,
        data:[1,2,3]
    }),
    Promise.reject({
        code:500,
        data:[]}),
    Promise.resolve({
        code:200,
        data:[7,8,9]
    }),

]).then(res => {console.log(res)
    console.log("胜利")
}).catch(err => {console.log(err)
    console.log("失败")
})  // {code: 500, data: Array(0)}  失败 

这样就齐全覆盖了申请胜利的回调,所以在 es11 中引入了 Promise.allSettled 办法,应用办法如下

Promise.allSettled([
    Promise.resolve({
        code:200,
        data:[1,2,3]
    }),
    Promise.reject({
        code:500,
        data:[]}),
    Promise.resolve({
        code:200,
        data:[7,8,9]
    }),

]).then(res => {console.log(res)
    console.log("胜利")
}).catch(err => {console.log(err)
    console.log("失败")
})  // [{status:"fulfilled",value:{code:200,data:[1,2,3]}},{status:"rejected",value:{code:500,data:[]}},{status:"fulfilled",value:{code:200,data:[7,8,9]}}]

最初能够通过数据的 status 和 value,利用 filter 或者 map 高阶函数进一步筛选数据。又是减少技能的一天,大家一起加油!
大家还能够扫描二维码,关注我的微信公众号,蜗牛全栈

正文完
 0