Javascript axios.all展开并捕获所有
我正在使用流行的库“axios”的.all方法来处理我的ajax请求 但是,如果所有请求都得到404,我如何处理错误呢 例如:Javascript axios.all展开并捕获所有,javascript,ajax,axios,Javascript,Ajax,Axios,我正在使用流行的库“axios”的.all方法来处理我的ajax请求 但是,如果所有请求都得到404,我如何处理错误呢 例如: axios.all([ axios.get('http://some_url'), axios.get('http://another_url'), ]) .then(axios.spread((someUrl, anotherUrl) => { // ... boring stuff
axios.all([
axios.get('http://some_url'),
axios.get('http://another_url'),
])
.then(axios.spread((someUrl, anotherUrl) => {
// ... boring stuff goes there
}))
.catch(() => {
//... error goes there
});
因此,似乎只有一个错误被本“发现”
我怎样才能抓住他们?或者有什么。最后?我认为这是不可能的,因为Promise的快速失败行为。如果您的任何请求失败,他们将自动成为罪魁祸首并导致捕获
Promise.all([
Promise.reject(Error('1')),
Promise.reject(Error('2')),
Promise.reject(Error('3'))
]).then((results) => {
console.log(results)
}, (error) => {
console.log(error.message)
})
这个生成的代码总是打印1,因为它是第一个失败的。我认为在回购协议上请求了类似的功能,他们说这是不可能的
我本打算把这作为一个评论,但还没有足够高的声誉。问题是(正如您已经知道的),一旦第一个承诺被拒绝,您将进入catch
块,从而无法在同一catch
中收集所有失败的响应。但是,您仍然可以手动处理失败的承诺,以聚合错误并在之后抛出
勾选此选项,此选项适用于您:
const promises = [
axios.get('http://some_url'),
axios.get('http://another_url'),
]
const promisesResolved = promises.map(promise => promise.catch(error => ({ error })))
function checkFailed (then) {
return function (responses) {
const someFailed = responses.some(response => response.error)
if (someFailed) {
throw responses
}
return then(responses)
}
}
axios.all(promisesResolved)
.then(checkFailed(([someUrl, anotherUrl]) => {
console.log('SUCCESS', someUrl, anotherUrl)
}))
.catch((err) => {
console.log('FAIL', err)
});
如果至少有一个承诺失败,您将进入
catch
块。您可以通过检查err
响应数组来找到其中一个。Dude,每个人都在发布问题之前进行搜索。有趣的是,我上周读到了这篇文章,因为我有同样的问题。应该刚刚发布了链接。对我来说很有用,但代码并不是那么直观。您能否添加更多关于承诺解决
和检查失败
是什么的解释doing@XavitojCheema您只需要处理某些请求失败的情况。在本例中,您捕获它并从中返回({error})
,从而从异常中恢复。因此,我们的想法是让所有请求都通过(解析),即使它失败了。如果某项操作失败,则错误将作为响应对象的error
属性提供。好的,这需要更多地了解承诺失败时的行为。谢谢请解释一下。