axios.all传播并抓住所有

时间:2018-02-08 08:45:51

标签: javascript ajax axios

我正在使用流行图书馆的所有方法' axios'处理我的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
        });

enter image description here

所以,似乎只有一个错误已被捕获"。

我怎样才能抓住它们?或者也许有点。最终?

2 个答案:

答案 0 :(得分:5)

问题(正如您所知)是,一旦第一个承诺拒绝,您将进入$2阻止,从而无法在同一$1中收集所有失败的回复。但是,您仍然可以手动处理失败的promise以聚合错误并在之后抛出。

检查一下这对你有用:

$3

如果至少有一个承诺失败,您将进入var rgx = /^(.*?>)(.*?)(<.*?)$/gm; var str = `<start>Apple Bandana Cadillac<stop> <stop>Grapes Trampoline Ham<stop> <start>Kebab Matador Pencil<start> op>Score False Razor<stop> `; var res = str.replace(rgx, `$2`); console.log(res);阻止。您可以通过查看catch响应数组找到一个。

答案 1 :(得分:1)

由于Promise.all的快速​​失败行为,我认为这是不可能的。如果您的任何请求失败,它们将自动成为罪魁祸首和结果。

    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,因为它是第一个失败。我认为在回购请求上有类似的功能,他们说这是不可能的。

我打算将此作为评论但尚未获得足够高的声誉。