首页 > 解决方案 > 如何在运行其余代码之前等待响应?

问题描述

我想运行一个 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");
  }
}

标签: javascriptaxios

解决方案


那是因为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");
  }
}

推荐阅读