首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在运行其余代码之前等待响应?

如何在运行其余代码之前等待响应?
EN

Stack Overflow用户
提问于 2019-06-14 08:53:12
回答 3查看 1.6K关注 0票数 1

我想运行一个调用后端的axios请求循环,并在重定向页面之前等待所有响应。

在下面的代码中,一旦收到200 OK的响应,我希望将其推送到promiseArray。如果我收到所有的promiseArray项目,我想重定向页面到另一个网址。

就我的情况而言,代码似乎并没有真正停下来等待响应。它为axios请求循环3次,但它没有等待响应,而是直接运行重定向部分。

有什么想法吗?

代码语言:javascript
运行
复制
 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");
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-14 08:56:31

这是因为promiseArray是空的,所以你要把结果推给它。将实际承诺推送到数组中。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-06-14 09:04:35

您希望在重定向页面之前等待所有响应,所以您需要使用Promise.all()

以下来自MDN的示例

代码语言:javascript
运行
复制
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"]
票数 0
EN

Stack Overflow用户

发布于 2019-06-14 09:31:44

如果您已经在一个地方使用async / await,为什么不到处使用它:

代码语言:javascript
运行
复制
 async function test(){
  var length = 3;

  for(var a=0; a<length; a++){

        var link = 'https://'+hostname+'/';
        var apiUrl = 'api/xxx';
        var token = "123";

        let res = await axios.create({
            baseURL: link,
            timeout: 60000,
            headers: {
                Authorization: token
            }
        }).post(apiUrl, {
            ...
        });
        /* Do whatever you need with res */
  }
  window.location.replace("https://"+hostname+"/abc");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56594683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档