【发布时间】:2016-11-25 08:34:18
【问题描述】:
我有这样的 Promise 数组:
let promisesArray = [
service1.load('blabla'),
service2.load(), // throws an errors
];
我想执行它们并像这样捕获它们的错误
Promise.all(promisesArray)
.then(() => doStuffs())
.catch((err) => handleError(err));
这很好,但我现在想在另一个承诺的 then() 中这样做:
baseService()
.then(() => Promise.all([
service1.load('blabla'),
service2.load(), // throw an errors
]))
.catch((err) => handleError(err));
只要我直接在 Promise.all() 中编写数组,这个也可以,但是如果我想使用 promiseArray 更早定义,例如:
baseService()
.then(() => Promise.all(promisesArray))
.catch((err) => handleError(err));
然后,catch() 按预期运行,但控制台出现错误
publish.js:45784 EXCEPTION: Error: Uncaught (in promise): ...
但是我想使用最后一个解决方案,因为我的数组是根据某些条件通过将 Promises 推送给它来生成的。 (第一个例子工作得很好,我不明白有什么不同)
将 catch 添加到我的每个 promise 中,同时将它们添加到数组中可以解决我的问题,但我想找到一个更好的解决方案。
我真的很感谢你的帮助。
PS:如果有变化,我将 angular2 与 zone.js 一起使用
【问题讨论】:
-
请告诉我们你是如何创建
promisesArray的。也许看看this
标签: javascript arrays angular promise zonejs