javascript - 在发送另一个 http 请求之前等待完成一个 http 请求?
问题描述
这一切都有效,除了每次我以不同的顺序得到结果。例如。2.name, 4.name, 1.name, 3.name, 5.name
.
如何在开始另一个 http req 之前完成每个 http req,以便我可以像数组一样按顺序获得结果?
const array = [ '1', '2', '3', '4', '5' ]
array.forEach(el=>{
axios.get(`/item/${el}`)
.then(res=>{
console.log(res.data.name)
}
})
解决方案
为了以相同的顺序获得结果,您可以简单地使用Promise.all
, 或axios.all
,但这将并行执行所有请求:
const array = [ '1', '2', '3', '4', '5' ];
axios.all(array.map(el => () => axios.get(`/item/${el}`))).then(data => console.log(data));
但是,如果您需要按顺序执行它们,那么按顺序执行,因为可能在第二个请求中您需要访问第一个请求的响应,您必须将每个下一个请求链接到then
前一个请求中:
const array = [ '1', '2', '3', '4', '5' ];
const requests = array.map(el => () => axios.get(`/item/${el}`));
requests[0]().then(data1 => {
requests[1]().then(data2 => { ... });
});
或者,如果您想避免地狱般的回调返回承诺,然后将then
块解开:
const array = [ '1', '2', '3', '4', '5' ];
const requests = array.map(el => () => axios.get(`/item/${el}`));
requests[0]()
.then(data1 => requests[1]())
.then(data2 => { ... });
或者您可以使用async/await
:
const array = ['1', '2', '3', '4', '5'];
const requests = array.map(el => () => axios.get(`/item/${el}`));
async function performRequests() {
const res1 = await requests[0]();
const res2 = await requests[1]();
}
performRequests();
推荐阅读
- powershell - 如何在 new-aduser 中跳过空值
- kubernetes - “kubectl get pods -A”命令不起作用
- sql - 在 postgres 中使用 GROUP BY 子句时如何聚合 json 字段?
- c++ - 如何通过向量中的struct id获取索引号
- ms-access - MS Access中有没有办法使用VBA来确定ODBC链接表是SQL视图还是表
- javascript - 水平滚动 div 而不是页面,然后滚动页面
- r - 在 R 中创建公式
- pytorch - RNN 层中“隐藏单元”的解释 (tensorflow,Pytorch)
- mqtt - 如何显示二进制 MQTT 数据?
- google-sheets - 更改谷歌表单响应的发件人地址