javascript - 如何在运行其余代码之前等待响应?
问题描述
我想运行一个 axios 请求调用后端循环,并在重定向页面之前等待所有响应。
在下面的代码中,一旦我收到 200 OK 的响应,我想将它推送到 promiseArray。如果我收到所有 promiseArray 项目,我想将页面重定向到另一个 url。
就我而言,似乎代码并没有真正停下来等待响应。它循环 axios 请求 3 次,但不是等待响应,而是直接运行重定向部分。
任何想法?
function test(){
var response = undefined;
var length = 3;
var promiseArray = [];
for(var a=0;a<length;a++){
var link = 'https://'+hostname+'/';
var apiUrl = 'api/xxx';
var token = "123";
axios.create({
baseURL: link,
timeout: 60000,
headers: {
Authorization: token
}
}).post(apiUrl, {
...
}).then(res => {
console.log(res);
promiseArray.push(res);
}).catch(err=>{
console.log("err");
console.log(err);
});
}
response = await axios.all(promiseArray);
if(response!=undefined){
window.location.replace("https://"+hostname+"/abc");
}
}
解决方案
那是因为promiseArray
它是空的,你将结果推送给它。将实际的 Promise 推送到数组中。
async function test(){
var response = undefined;
var length = 3;
var promiseArray = [];
for(var a=0;a<length;a++){
var link = 'https://'+hostname+'/';
var apiUrl = 'api/xxx';
var token = "123";
promiseArray.push(
axios.create({
baseURL: link,
timeout: 60000,
headers: {
Authorization: token
}
}).post(apiUrl, {
...
})
)
}
response = await axios.all(promiseArray);
if(response!=undefined){
window.location.replace("https://"+hostname+"/abc");
}
}
推荐阅读
- arrays - 使用字符串数组的数据透视表字段
- excel - 调用 Form.Show vbmodeless 时,VBA 表单(自动)绑定/绑定到 ActiveWorksheet
- encryption - Unicode 字符中的字节数总是 1-4,还是可以是不同的长度?
- reactjs - 如何用一行代码替换包含反应组件的对象?
- android - 如何仅从 firebase 获取新文档?
- sql - 如何在postgresql中使用查询结果提供的数据添加新列
- r - 函数每次都会覆盖同一个对象:我怎样才能避免这种情况?
- qt - TextArea QML 5.13 组件对于大文本非常慢
- bash - 管道 nginx -V 到 grep 的颜色不匹配
- python - 在尝试使用 train_test_split 时,我的测试集形状很奇怪