Javascript axios.all展开并捕获所有

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方法来处理我的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
        });

因此,似乎只有一个错误被本“发现”


我怎样才能抓住他们?或者有什么。最后?

我认为这是不可能的,因为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
属性提供。好的,这需要更多地了解承诺失败时的行为。谢谢请解释一下。