Promise.all()和Promise.allSettled()的使用

Promise.all()

当多个请求同时上传时,全部成功获取到数据才能执行下一步

var allurl = ['http://10.16.xxx.211:8082/api/uploadFont',"http://10.18.xxx.73:8082/api/uploadFont"]
//allpost()封装的 $.ajax请求
  Promise.all(allurl.map(async (item) => {
                return await allpost(item)
            }))
            .then((values) => { 
            //执行下一步(发送请求)
            })
            .catch(req => {
                 console.log("上传失败了");
            })
            //封装的 $.ajax请求
              function allpost(url) {
                let p = new Promise(function (resolve, reject) {
                    $.ajax({
                        type: "POST",
                        url: url,
                        data: data,
                        async: true,
                        contentType: false,  //多出的参数配置
                        processData: false,  //多出的参数配置
                        success: function (res) {
                            console.log(res);
                            res = JSON.parse(res)
                            if (res.success) {
                            //返回成功数据
                                resolve(res);
                            } else {
                            //返回成功数据
                                reject(res)
                            }
                        }, error: function (json) {
                            console.log("请求失败");
                        }
                    })
                }
                )
                return p
            }

注Promise.all()是只能获取到第一个失败回调的

Promise.allSettled()

想知道每个promise的结果时,通常使用它。

Promise.allSettled(promise数组).then(statuses => {
 statuses; // [{ status: '...', value: '...' }, ...]
});
返回的数组statusesPromise中每一项的的格式如下:

{ status: 'fulfilled', value: value } — 如果对应的 promise 已完成 
或者
{ status: 'rejected', reason: reason } — 如果相应的 promise 已拒绝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promise.all和Promise.allSettled是两种不同的Promise方法,它们在使用场景和返回结果上有所不同。 1. Promise.all: - 使用场景:当需要等待多个Promise对象都完成后再执行后续操作时,可以使用Promise.all。 - 返回结果:返回一个新的Promise对象,Promise对象在所有给定的Promise对象都已经fulfilled后才会fulfilled,如果其中任何一个Promise对象被rejected,则返回的Promise对象会立即被rejected。 - 示例代码: ```javascript const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3); Promise.all([promise1, promise2, promise3]) .then(values => { console.log(values); // 输出:[1, 2, 3] }) .catch(error => { console.log(error); // 如果有任何一个Promise对象被rejected,则会执行这里的代码 }); ``` 2. Promise.allSettled: - 使用场景:当需要等待多个Promise对象都完成后,无论是fulfilled还是rejected,都需要获取每个Promise对象的结果时,可以使用Promise.allSettled。 - 返回结果:返回一个新的Promise对象,该Promise对象在所有给定的Promise对象都已经fulfilled或rejected后才会fulfilled,返回的Promise对象带有一个对象数组,每个对象表示对应的Promise对象的结果,包括状态(fulfilled或rejected)和值。 - 示例代码: ```javascript const apiOne = function(id) { return new Promise((resolve, reject) => { resolve({ result: true, text: 1 }); }); }; const apiTwo = function(id) { return new Promise((resolve, reject) => { reject({ result: true, text: 2 }); }); }; Promise.allSettled([apiOne('one'), apiTwo('two')]) .then(results => { console.log(results); /* 输出: [ { status: 'fulfilled', value: { result: true, text: 1 } }, { status: 'rejected', reason: { result: true, text: 2 } } ] */ }) .catch(error => { console.log(error); }); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值