Promise.all 中的多个 fetch() - 哪个失败了?

Dar*_*ney 1 javascript es6-promise fetch-api

如果我fetch()在一个Promise.all块内有多个调用,当一个调用失败时,它都会失败。太好了,我需要他们全部解决。

但是,我如何才能找到哪个实际上失败了?

在下面的代码中,catch error告诉我:

类型错误:无法获取`

如果我选择这样做,则无法构建有效的用户错误消息。

const goodUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js';
const badUrl = 'https://ajax.googleapis77.com/ajax/libs/jquery/2.1.3/jquery.min.js';
Promise.all([
    fetch(goodUrl),
    fetch(badUrl), /* will fail */
    fetch(goodUrl)
]).then(([response1, response2, response3]) => {
    console.log(response1);
    console.log(response2);
    console.log(response3);
}).catch((err) => {
    console.log(err);
});
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴(一个片段不太好)

我寻找了重复项,这不是一个,因为示例抛出了相同的错误

Nho*_*hor 5

您可以单独捕获它们中的每一个以及throw一些自定义错误,例如:

...
Promise.all([
    fetch(goodUrl).catch(err => {
        throw {url: goodUrl, err};
    }),
    fetch(badUrl).catch(err => {
       throw {url: badUrl, err};
    }),
    fetch(goodUrl).catch(err => {
       throw {url: goodUrl, err};
    })
])
...
Run Code Online (Sandbox Code Playgroud)

  • @SebastianSpeitel `{ err }` 是 `{ err : err }` 的 [速记符号](https://ariya.io/2013/02/es6-and-object-literal-property-value-shorthand) (2认同)