js循环中含有异步请求同步写法

如下 js 函数需要返回一个请求成功的数据数组,但是由于 ajax 为异步请求,循环中发送多个请求,函数 return 时请求结果还未返回,所以 return 的永远是空数组

解决方法

使用 async await 阻断函数执行,等待所有的请求返回,此时 temp 中包含了所有返回数据,也可以在 then() 方法中处理返回数据

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
Promise.all() 方法接受一个数组作为参数,数组中的元素必须均为
promise 的实例

    async getAduitNodeData(paramsList) {
      resNodeIdParams = [];
      const promises = paramsList.map(params => {
        return Api.request({
          url: 'XXXXXXX',
          method: 'post',
          data: params
        }).then(result => {
          if (result && result.success) {
            resNodeIdParams.push(result.data);
          } else {
            this.$message({
              type: 'error',
              message: result.errorMsg
            });
          }
        });
      });
      const temp = await Promise.all(promises);
      return resNodeIdParams;
    }

你可能感兴趣的:(js循环中含有异步请求同步写法)