为了账号安全,请及时绑定邮箱和手机立即绑定

Axios:如何一个接一个地运行多个请求?

Axios:如何一个接一个地运行多个请求?

冉冉说 2022-10-21 10:14:49
我有一个非常大的 ID 数组(数千个 ID)。我想遍历这个数组,并为每个值,向 API 发出请求,如下所示:[12, 32, 657, 1, 67, ...].forEach((id) => {    axios.get(`myapi.com/user/${id}`).then(({ data }) => {        console.log(data.name);    });});但是,我有很多请求要发出,我无法使它们异步,因为我的计算机有限制……是否可以等待每个请求完成后再发出下一个请求?
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

而不是使用forEachin id 尝试Promise.all

const ids = [12, 32, 657, 1, 67];

const promises = ids.map((id) => axios.get(`myapi.com/user/${id}`));


Promise.all([...promises]).then(function (values) {

  console.log(values);

});

假设我们希望许多 Promise 并行执行并等待它们都准备好。


例如,并行下载多个 URL 并在完成后处理内容。

来自https://javascript.info/promise-api


查看完整回答
反对 回复 2022-10-21
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

首先,很明显你必须重新设计你的 api。


但是,您可以尝试:



Promise.all([12, 32, 657, 1, 67, ...].map((id) => {

    return axios.get(`myapi.com/user/${id}`).then(({ data }) => {

        console.log(data.name);

    });

})).then(_=>console.log('done'));


或查看p-queue,它将帮助您管理承诺队列。



查看完整回答
反对 回复 2022-10-21
?
慕容森

TA贡献1853条经验 获得超18个赞

假设您允许n在任何给定时间发送最大请求。为了这个例子,我假设它是 10:


var n = 10;

我们还存储当前索引:


var index = 0;

让我们实现一个函数来处理请求:


function req() {

    axios.get(`myapi.com/user/${input[index]}`).then(({ data }) => {

        console.log(data.name);

        if (index + 1 < input.length) {

            index++;

            req();

        }

    });    

}

然后,让我们发送第一个n请求:


while (index < n) {req(); index++}

是的,index是全局的,但为了便于阅读,它是全局的。


查看完整回答
反对 回复 2022-10-21
  • 3 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信