我想运行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");
}
}
答案 0 :(得分:0)
那是因为promiseArray
为空,您正在将结果推向它。将实际的承诺发送到数组。
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");
}
}
答案 1 :(得分:0)
您希望在重定向页面之前等待所有响应,因此您需要使用Promise.all()
以下来自MDN的示例
var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then(function(values) {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
答案 2 :(得分:0)
如果您已经在一个地方使用class Doughnut {
final String name;
final String filling;
final String topping;
final double price;
Doughnut(this.name, this.filling, this.topping, this.price);
Doughnut.fromJson(Map<String, dynamic> json)
: name = json['name'],
filling = json['filling'],
topping = json['topping'],
price = json['price'];
Map<String, dynamic> toJson() => {
'name' : name,
'filling' : filling,
'topping' : topping,
'price' : price
};
}
,为什么不在所有地方使用它:
async / await