Vik*_*sal 3 javascript promise reactjs axios
我试图使服务器同时获取请求,为了做到这一点,我编写了以下函数。
问题
如果单个调用失败,那么我将无法获得其余请求的响应。
export const getAll = async (collection) => {
return new Promise((resolve, reject) => {
const requests = collection.map(req => {
const config = {
headers: req.headers,
params: req.params
}
return axios.get(req.url, config);
})
axios.all(requests)
.then(axios.spread((...args) => {
// all succerss
resolve(args);
}))
.catch(function (error) {
// single call fails and all calls are lost
reject(error)
});
})
}
Run Code Online (Sandbox Code Playgroud)
是否可以获取所有请求的结果,无论失败还是成功?
换句话说,即使请求失败,您也希望像请求成功一样执行其余代码。
我们假设响应不能是null。然后我们捕获请求的错误并null在本例中返回请求。
export const getAll = async (collection) => {
const requests = collection.map(req => {
const config = {
headers: req.headers,
params: req.params
};
return axios.get(req.url, config).catch(() => null);
})
return axios.all(requests);
}
Run Code Online (Sandbox Code Playgroud)
因此,如果你有catch()并且它没有抛出异常,那么所有后续代码都会像 Promise 一样工作,已解决而不是拒绝。
另请注意,您不需要Promise从async函数中显式返回,因为它会自动发生。更重要的是:由于您没有await内部函数,因此实际上不需要将其标记为async. 最后axios.all返回,Promise这样你就不需要手动resolve/ rejectPromise 了。
| 归档时间: |
|
| 查看次数: |
3369 次 |
| 最近记录: |