【发布时间】:2019-02-06 15:47:03
【问题描述】:
我正在使用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)(返回错误消息)。
【问题讨论】:
-
你试过 Promise.all(),并给每个 axios 请求一个自己的 catch 块,这样一个失败就不会失败另一个承诺?
标签: javascript node.js axios inquirerjs