JS promise的四种并行方法对结果的处理

文章讲述了JavaScript中Promise的四种使用方式:Promise.all等待所有Promise完成,allSettled等待所有Promise结束并返回结果对象,Promise.any只要一个Promise成功就结束,Promise.race关注第一个完成的Promise。每个方法在处理异步任务时有不同的行为和适用场景。
摘要由CSDN通过智能技术生成
方法结果策略
Promise.all失败一个就结束, 返回错误值, 全对就成功, 返回结果数组防止有失败的情况,全部成功才能下一步
Promise.allSettled所有结束后返回Object数组, 带status和value属性只为了全部执行,全部执行完才能下一步
Promise.any有一个成功就成功, 立即结束, 即使失败的比成功的先结束, 也等一个成功的
都不成功的话会报错 AggregateError: All promises were rejected
所有函数都尝试一下,成功一个就算成功
Promise.race第一个成功或失败就结束, 返回结果所有函数都尝试一下,只关心第一个成功或失败

只有allSettled会把所有结果汇总起来,其他三个只关心一个

<script>
        async function test() {
           var p1 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(1);
                }, 1000)
            })
            var p2 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(2);
                }, 2000)
            })
            var p3 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(3);
                }, 500)
            })
            var start_date = new Date();
            await Promise.all([p1, p2, p3]).then(function (results) {
                console.log("结束all", new Date() - start_date, results)
            }).catch(res => { console.log("失败all", new Date() - start_date, res); });
        }
        async function test2() {
            var p1 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(1);
                }, 1000)
            })
            var p2 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(2);
                }, 2000)
            })
            var p3 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(3);
                }, 500)
            })
            var start_date = new Date();
            await Promise.allSettled([p1, p2, p3]).then(function (results) {
                console.log("结束allSettled", new Date() - start_date, results)
            }).catch(res => { console.log("失败allSettled", new Date() - start_date, res); });
        }
        async function test3() {
            var p1 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(1);
                }, 1000)
            })
            var p2 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(2);
                }, 2000)
            })
            var p3 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(3);
                }, 500)
            })
            var start_date = new Date();
            await Promise.any([p1, p2, p3]).then(function (results) {
                console.log("结束any", new Date() - start_date, results)
            }).catch(res => { console.log("失败any", new Date() - start_date, res); });
        }
        async function test4() {
            var p1 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(1);
                }, 1000)
            })
            var p2 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(2);
                }, 2000)
            })
            var p3 = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    reject(3);
                }, 500)
            })
            var start_date = new Date();
            await Promise.race([p1, p2, p3]).then(function (results) {
                console.log("结束race", new Date() - start_date, results)
            }).catch(res => { console.log("失败race", new Date() - start_date, res); });
        }
        async function alltest() {
            await test();
            await test2();
            await test3();
            await test4();
        }

        alltest()
        
        
    </script>
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值