我正在使用流行库'axios'的.all方法来处理我的ajax请求。
但是,如果所有请求都得到404,我如何处理错误?
例如:
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
});
因此,似乎只有一个错误被“抓住”了。
我怎么才能把他们都抓起来?或者有什么办法?
3条答案
按热度按时间sc4hvdpw1#
问题是(正如您已经知道的),一旦第一个promise被拒绝,您就会进入
catch
块,这使得无法在同一个catch
中收集所有失败的响应。但是,您仍然可以手动处理失败的promise,以聚合错误,然后抛出。检查它这将为您工作:
如果至少有一个承诺失败,你就会进入
catch
块。你可以通过检查err
数组的响应来找到一个。envsm3lx2#
我认为这是不可能的,因为Promise.all的快速失败行为。如果您的任何请求失败,它们将自动成为捕获的罪魁祸首和结果。
这个结果代码总是打印1,因为它是第一个失败的。我认为一个类似的功能是要求在回购,他们说这是不可能的。
我本来想把这个作为一个评论,但还没有一个足够高的声誉。
aamkag613#
来自@dfsq的解决方案对我不起作用,因为当一个请求出错时,它会抛出所有请求。我修改了他的代码,这样每个请求要么得到解决,要么抛出一个错误。@dfsq请检查这个答案,如果代码正确的话,因为我是在你的解决方案上构建的。