vue.js中如何用promise实现for循环ajax调用?

发布于 2022-09-06 07:57:41 字数 161 浏览 12 评论 0

web前端界面加载过程中,需要进行对某个数组中的每个对象逐个进行ajax调用,从后台获取该对象的更多详情属性:
for (i in array)
{

ajax()

}

这样的场景可以用promise么?请大神给建议!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

↙厌世 2022-09-13 07:57:41

可以,类似于

let proArr = [];
for(i in array){
    proArr.push(new Promise(ajax()))
}
Promise.all(proArr).then(res=>{...}).catch(...)

这样then里的res就是所有的ajax的结果数组
Promise.all()

深海夜未眠 2022-09-13 07:57:41

前后请求是否对返回的数据有依赖

深陷 2022-09-13 07:57:41

可以用,如果你获取的数据之间没有关联的话,在ajax返回后对array[i]里面的数据进行扩充。
tips:注意一下在异步过程中捕获正确的i值。

债姬 2022-09-13 07:57:41
    function ajax(mode,url,data){
        return new Promise(function(resolve,reject){
            var request = new XMLHttpRequest();
            request.open(mode,url,true);
            console.log(postDataFormat(data))
            request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");                
            request.send(postDataFormat(data));
                request.onload  = function(){
                    if((this.status >= 200 && this.status < 300) || this.status == 304){
                        resolve(this);
                    }else{
                        reject(this);
                    };
                };
        })
    }
    function postDataFormat(obj){
      if(typeof obj != "object" ) {
          alert("输入的参数必须是对象");
          return;
      }
          var arr = new Array();
          var i = 0;
          for(var attr in obj) {
              arr[i] = encodeURIComponent(attr) + "=" + encodeURIComponent(obj[attr]);
              i++;
          }
          return arr.join("&");
    }
    //调用
    ajax('POST','./1.php',{aaa:"aaa",bbb:"bbb"}).then((res)=>{
        console.log(res.response);
        return ajax('POST','./1.php',{aaa:"aaa1",bbb:"bbb1"});
    }).then((res)=>{
        console.log(res.response);
    }).catch((res)=>{
        console.log(res.statusText);
    })
    //当然,也可以用并行
    Promise.all([ajax('POST','./1.php',{aaa:"aaa",bbb:"bbb"}),ajax('POST','./1.php',{aaa:"aaa1",bbb:"bbb1"})]).then(function(allres){
        console.log(allres);
    })
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文