js 在同步的方法中并发多条ajax的问题?

async getData() {
      await this.Arr.forEach(async val => {
        let obj = {};
        let itemBody = {key:val}
        let data = await post(this.dataUrl, itemBody, this.header);
        console.log(data);
        if (data.result) {
          obj[val] = data.result.res;
          closeAry.push(obj);
        }
      });
      this.closeAry = closeAry;
      let setKey = this.getStorageKey()
      wx.setStorageSync(setKey.toString(), closeAry)
    }

Arr 数组对应的是15条接口,本来想同步执行每个ajax,但是太慢。怎样让并发请求数据,返回结果在closeAry的顺序和Arr顺序对应?

阅读 1.3k
1 个回答

每个请求都放到promise中,这样就构成了一个包含15个promise的数组,使用Promise.all(promise数组)并发执行,然后then取出数据。

最终效果图大概这个样子,示意,可能有bug

async getData() {
  let promises = [];
  this.Arr.forEach(val => {
      promises.push(new Promise(resolve, reject) {
        let obj = {};
        let itemBody = {key:val}
        post(this.dataUrl, itemBody, this.header)
          .then(data=>resolve({[val]:data.result.res}))
          .catch(reject);
      });
  });

  let closeAry = await Promise.all(promises);

  this.closeAry = closeAry;
  let setKey = this.getStorageKey();
  wx.setStorageSync(setKey.toString(), closeAry);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题