如果在使用 async-await
处理接口取返回值,若没有对返回值进行 Promise 封装处理
,那么最终等到的返回值就是一个 Promise对象
。
所以需要在将接口获取到值往外层函数传的时候,对其进行 Promise 封装处理
,然后再得到一个 Promise 封装处理后的对象
之后用 Promise.allSettled()
取对象里的值,在用 filter()
函数 和 map()
函数 对其值进行过滤筛选,最终获取到的才是我们要的值。
const fetchCheck = async () => {
const promises = selected.map(async (item) => {
try {
const response = await axios.get('/applyservice/support/budget/control', {
params: {
documentId: item.id,
type: 1,
},
});
if (response.status === 200 && response.data.code === 200) {
return Promise.resolve(response.data.data);
}
return Promise.reject(Error(response.data.msg));
} catch (e) {
return Promise.reject(Error('请求失败'));
}
});
const results = await Promise.allSettled(promises);
const resultResolove = results.filter((item) => item.status === 'fulfilled').map((item) => item.value);
const canSubmitIds = [];
resultResolove.forEach((item) => {
if (item.isOverBudget === false && item.isOverFunding === false) {
canSubmitIds.push(item.id);
} else {
enqueueSnackbar('单据超预算,未能提交', {
variant: 'error',
});
}
});
if (canSubmitIds.length > 0) {
handleSubmit(canSubmitIds);
}
};