如下 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;
}
网友评论