【工作】Promise.all处理多个请求

Promise.all处理多个请求



背景

最近在整理React项目开发的一些功能点以及回顾遇到的问题,有一些由于工作没来得及整理,比如当时处理一键开票需求时,通过Promise.all解决处理多个请求。


一、Promise是什么?

这个大家应该不陌生,简单介绍下。

Promise是JavaScript中一种用于处理异步操作的对象,它可以避免回调函数嵌套的问题,使得异步操作更加直观、易于管理和编写。

二、Promise.all

1.介绍

Promise.all是一个用于处理多个Promise实例的方法,它接收一个Promise数组作为参数,并返回一个新的Promise实例,用于等待所有的Promise实例都完成。当所有的Promise实例都成功完成时,返回的Promise实例才会变成fulfilled状态,同时将所有的结果以数组的形式传递给then方法;当其中任意一个Promise实例失败或出现错误时,返回的Promise实例会变成rejected状态,并将第一个失败或错误的Promise实例的结果传递给catch方法。

代码如下(示例):

const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.resolve(3);

Promise.all([promise1, promise2, promise3]).then((result) => {
  console.log(result); // 输出 [1, 2, 3]
}).catch((error) => {
  console.error(error); // 没有错误,不会执行
});

需要注意的是,Promise.all方法会等待所有的Promise实例都完成,因此如果其中某个Promise实例的执行时间比较长,会影响整个Promise.all的执行效率。此外,如果其中某个Promise实例返回的结果是一个rejected状态,整个Promise.all方法也会立即结束,并将错误信息传递给catch方法,因此在使用Promise.all方法时需要特别注意错误处理的问题。

总的来说:Promise.all是一个非常有用的方法,可以帮助处理多个异步操作,提高代码的简洁性和可读性。

2.实际使用

代码如下(示例):

let PROMISE_ITEM;
PROMISE_ITEM = new Promise((resolve, reject) => {
    this.postInvoiceOrder(START_TIME, ONE_TIME)
        .then(res => {
            if (res.code === 0) {
                resolve(res);
            } else {
                reject(res);
            }
        })
        .catch(err => {
            reject(err);
        })

})
PROMISE_REQ.push(PROMISE_ITEM);
Promise.all(PROMISE_REQ).then((result) => {
    result.map(v => {
        this.orderCount += v.data.orderNum;
        this.orderPrice += v.data.orderTotalAmount;
    })
    message.success(result[0].message);
}).catch((error) => {
    console.log('error arr', error)
    const msg = error && Object.prototype.toString.call(error).indexOf('Array') > -1 ? error[0] : (error || {})
    message.error(msg.message || '查询订单失败');
    console.log(error, 'error发票查询失败')
})

总结

以上就是今天的内容,本文仅仅简单介绍了Promise.all的使用,Promise.all可以帮助了处理多个异步操作。要记住会Promise.all会将所有结果以数组的形式传递给then方法,当其中任意一个Promise实例失败或出现错误时,返回的Promise实例会变成rejected状态,并将第一个失败或错误的Promise实例的结果传递给catch方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值