【发布时间】:2019-08-21 09:14:49
【问题描述】:
我目前有这个代码:
const promise1 = aPromiseCall().then(r => logger(r)).catch(e => logger(e));
const promise2 = anotherPromiseCall().then(r => logger(r)).catch(e => logger(e));
在异步函数中我这样做:
const results = Promise.all([promise1, promise2]);
我这样做是因为我想确保如果 promise1 失败,我仍然可以执行 promise2。但是,我不知道这是否是实现这一目标的最佳方式。我应该在每个承诺中都使用then, catch,还是有更惯用的方法?
同时我想保证在我继续执行我的代码之前所有的承诺都被解决/拒绝,这就是为什么我把它们放在Promise.all中。
【问题讨论】:
-
仅供参考,您在第一行代码的末尾缺少一个额外的
)。 -
如果您希望将每个承诺的结果传递给
Promise.all的then(),则不应在没有return的情况下执行then()。您过度简化了用例,因此不清楚期望是什么 -
@charlietfl 我只是在记录结果/错误。我需要退货吗?我真的不关心在 Promise.all 中做一个 then,我只是使用 Promise.all 来确保所有的承诺都完成了。因为在 Promise.all 之后我做了其他事情,而所有这些承诺都必须在那时完成。
-
OK....这就是我所说的期望。如果您不需要 Promise.all 中的结果,那么您所做的应该基本上没问题。
catch()不会抛出传递给它的错误,它会在链上返回一个新的承诺,因此将在 Promise.all 中解决 -
酷,@charlietfl 你能在你的评论中添加一个答案吗,我认为它解决了我原来的问题。
标签: javascript promise async-await