gpt4 book ai didi

javascript - 并行运行多个 Axios 请求以验证数据

转载 作者:行者123 更新时间:2023-11-30 07:51:31 25 4
gpt4 key购买 nike

我正在使用 Inquirer.js与用户交互。在其中一个对话框中,用户可以指定一个逗号分隔的“项目”列表。以下验证函数根据 API 检查“项目”是否可用。否则,系统会提示用户更正他之前的选择。

当前代码:

validate: async str => {    
const items = str.split(',');

for(let item of items) {
try {
await axios.get(`https://api.example.com/items/${item}`);
} catch(e) {
return `The item '${item}' could not be found`;
}
}

// data exists, but is irrelevant
return true;
}

虽然这一切都按预期工作,但遍历一组包并在每个项目上调用 axios.get() 似乎效率极低。有没有办法并行运行这些请求并在其中一个请求失败后中断?

同样,我对项目的实际数据不感兴趣,只关心它是否存在(等于 true)或不存在(返回错误消息)。

最佳答案

首先要看的是,JavaScript 不能真正以传统意义上的“并行”方式运行,因为它不是多线程环境。

但是,您可以在一个 block 中发送所有 API 调用,然后一起等待响应,而不是在发送下一个之前等待每个响应。这可以使用 Promise API 的 Promise.all 来完成,见下文:

var promises = [];
for(let item of items) {
promises.push(axios.get(`https://api.example.com/items/${item}`));
}
try {
var responses = await Promise.all(promises); // responses will be an array
} catch (err) {
// do something with error
}

And here the Promise.all docs

编辑:我添加了一个 try/catch block 来匹配 OP。

关于javascript - 并行运行多个 Axios 请求以验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com