首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axios :如何一个接一个地运行多个请求?

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

Stack Overflow用户
提问于 2020-06-29 06:20:40
回答 3查看 1.7K关注 0票数 3

我有一个非常大的I数组(数千个I)。我想遍历这个数组,并为每个值向API发出如下请求:

代码语言:javascript
复制
[12, 32, 657, 1, 67, ...].forEach((id) => {
    axios.get(`myapi.com/user/${id}`).then(({ data }) => {
        console.log(data.name);
    });
});

然而,我有太多的请求要做,我不能让它们异步,因为我的计算机有限制……是否可以在发出下一个请求之前等待每个请求完成?

EN

回答 3

Stack Overflow用户

发布于 2020-06-29 06:35:59

尝试使用Promise.all,而不是在id中使用forEach

代码语言:javascript
复制
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);
});

假设我们希望多个promises并行执行,并等待所有承诺都准备就绪。

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

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

票数 4
EN

Stack Overflow用户

发布于 2020-06-29 06:26:07

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

但是,您可以尝试:

代码语言:javascript
复制
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,它将帮助您管理承诺队列。

票数 0
EN

Stack Overflow用户

发布于 2020-06-29 06:53:44

假设您允许在任何给定时间最大限度地发送n请求。为了便于示例,我假设它是10:

代码语言:javascript
复制
var n = 10;

我们还存储当前索引:

代码语言:javascript
复制
var index = 0;

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

代码语言:javascript
复制
function req() {
    axios.get(`myapi.com/user/${input[index]}`).then(({ data }) => {
        console.log(data.name);
        if (index + 1 < input.length) {
            index++;
            req();
        }
    });    
}

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

代码语言:javascript
复制
while (index < n) {req(); index++}

是的,index是全局的,但是为了可读性,它是全局的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62628829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档