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

时间:2018-11-11 19:50:00

标签: javascript es6-promise fetch-api

如果我在一个fetch()块中有多个Promise.all调用,那么当一个失败时,全部失败。太酷了,我需要他们全部解决。

但是,我怎么找到哪一个真正失败了?

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

  

TypeError:无法提取`

如果我选择这样做,就不可能构造有效的用户错误消息。

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);
});

Here's a fiddle (a snippet didn't play nice)

我一直在寻找重复的this is not one as the examples throw the same error

2 个答案:

答案 0 :(得分:3)

您可以单独捕获它们,并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};
    })
])
...

答案 1 :(得分:2)

我建议您在apply周围做一个自己的小包装,这会引发包含所需信息的自定义错误:

fetch()

正在运行的jsFiddle演示:https://jsfiddle.net/jfriend00/1q34ah0g/