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

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


[12, 32, 657, 1, 67, ...].forEach((id) => {

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

        console.log(data.name);

    });

});

但是,我有很多请求要发出,我无法使它们异步,因为我的计算机有限制……是否可以等待每个请求完成后再发出下一个请求?


冉冉说
浏览 193回答 3
3回答

慕容708150

而不是使用forEachin id 尝试Promise.allconst 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

潇潇雨雨

首先,很明显你必须重新设计你的 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,它将帮助您管理承诺队列。

慕容森

假设您允许n在任何给定时间发送最大请求。为了这个例子,我假设它是 10:var n = 10;我们还存储当前索引:var index = 0;让我们实现一个函数来处理请求:function req() {&nbsp; &nbsp; axios.get(`myapi.com/user/${input[index]}`).then(({ data }) => {&nbsp; &nbsp; &nbsp; &nbsp; console.log(data.name);&nbsp; &nbsp; &nbsp; &nbsp; if (index + 1 < input.length) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; req();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp;&nbsp;}然后,让我们发送第一个n请求:while (index < n) {req(); index++}是的,index是全局的,但为了便于阅读,它是全局的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript