Promise.all是全有还是全无。一旦阵列中的所有承诺都解决,它就会解决,或者一旦 其中一个
拒绝,就立即拒绝。换句话说,它要么使用所有已解析值的数组进行解析,要么使用单个错误进行拒绝。
有些库中有一个叫做的东西
Promise.when,据我所知,它会等待数组中的 所有 promise解析或拒绝,但是我并不熟悉它,而且它不在ES6中。
您的密码
我在这里同意其他人的观点,认为您的修复应该可以进行。它应使用可能包含成功值和错误对象混合的数组来解析。在成功路径中传递错误对象是不寻常的,但是假设您的代码期望它们,我认为它没有问题。
我能想到它“无法解决”的唯一原因是,它在代码中失败,您没有向我们显示;而您没有看到关于此的任何错误消息,是因为该诺言链没有以final结尾捕获(就您正在向我们展示的内容而言)。
我冒昧地从您的示例中排除了“现有链”,并以一条链来终止该链。这可能不适合您,但是对于阅读此书的人来说,始终返回或终止链很重要,否则潜在的错误(甚至编码错误)将被隐藏(这是我怀疑在这里发生的事情):
Promise.all(state.routes.map(function(route) { return route.handler.promiseHandler().catch(function(err) { return err; });})).then(function(arrayOfValuesOrErrors) { // handling of my array containing values and/or errors. }).catch(function(err) { console.log(err.message); // some coding error in handling happened});


