Promise.all获取forEach循环请求数据

8 篇文章 0 订阅

    Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。       

       let proArr = [];

                newArry.forEach(function (item, index) {

                    proArr[index] = new Promise(function (resolve) {

                        axios({

                            url,

                            method: 'post',

                            data:{

                                number:item

                            },

                            headers: {'groupname': groupname,'accountid':accountid,'Content-Type': 'application/json','Access-Control-Allow-Origin': '*' }//设置header信息

                        }).then(res=>{

                            resolve(res.data);

                        }).catch(function (error) {

                             reject(error);

                        })

                    });

                })

  

                Promise.all(proArr).then((info)=>

                    res.status(200)

                    res.json({

                        success:true,

                        results:info

                    }) 

                  }).catch(function (err) {

                    console.log(err);

                  })

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
foreach 循环调用接口会有异步请求的问题,可能会导致数据顺序错乱或者出现其他问题。为了解决这个问题,可以使用 Promise.all 来处理异步请求Promise.all 可以接收一个由 Promise 对象组成的数组作为参数,当所有的 Promise 对象都成功执行时,Promise.all 才会返回一个成功的 Promise 对象;如果其中任意一个 Promise 对象失败,Promise.all 就会返回一个失败的 Promise 对象。 下面是一个使用 Promise.all 解决异步请求问题的示例代码: ``` const ids = [1, 2, 3, 4, 5]; const promises = []; ids.forEach(id => { const promise = fetch(`/api/data/${id}`).then(response => response.json()); promises.push(promise); }); Promise.all(promises) .then(results => { console.log(results); }) .catch(error => { console.log(error); }); ``` 在上面的代码中,我们使用 forEach 循环遍历了一个包含 5 个数据 id 的数组,然后将每个 id 传递给 fetch 函数发起异步请求,将返回的 Promise 对象添加到 promises 数组中。最后使用 Promise.all 来处理这些 Promise 对象,当所有的 Promise 对象都成功执行时,Promise.all 返回一个包含所有结果的数组。如果其中任意一个 Promise 对象失败,Promise.all 就会返回一个失败的 Promise 对象。 这样使用 Promise.all 可以保证所有异步请求都成功执行并按顺序返回结果,避免了因为异步请求导致数据顺序错乱或者出现其他问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT侠客行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值