当其中一个调用失败时,promise.all 如何处理多个 API 调用?
How does promise.all handle multiple API calls when one of them fails?
我有一个关于 promise.all
如何处理拒绝的问题。
假设我们有以下命令
await Promise.all([
server1.logMessage(),
server2.logMessage()
])
假设服务器 1 需要 2 秒来记录,服务器 2 需要 5 秒来记录。
如果 server1.logMessage()
returns 在 1 秒内出现错误会发生什么。即使 promise.all
的结果承诺被拒绝,我们能否确定 server2 至少会记录消息?
或者我需要使用 Promise.allSettled
吗?
是的,你的承诺看起来是独立的。您的代码等同于:
const prom1 = server1.logMessage();
const prom2 = server2.logMessage();
await Promise.all([prom1, prom2])
Promise.all
所做的只是调整程序的流程 在那个块 - 它不会影响 logMessage
可能会或可能不会发生的事情做。如果一个 logMessage
碰巧记录了一条消息,或者它碰巧出错了,那将不会影响另一个 logMessage
所做的事情。
我有一个关于 promise.all
如何处理拒绝的问题。
假设我们有以下命令
await Promise.all([
server1.logMessage(),
server2.logMessage()
])
假设服务器 1 需要 2 秒来记录,服务器 2 需要 5 秒来记录。
如果 server1.logMessage()
returns 在 1 秒内出现错误会发生什么。即使 promise.all
的结果承诺被拒绝,我们能否确定 server2 至少会记录消息?
或者我需要使用 Promise.allSettled
吗?
是的,你的承诺看起来是独立的。您的代码等同于:
const prom1 = server1.logMessage();
const prom2 = server2.logMessage();
await Promise.all([prom1, prom2])
Promise.all
所做的只是调整程序的流程 在那个块 - 它不会影响 logMessage
可能会或可能不会发生的事情做。如果一个 logMessage
碰巧记录了一条消息,或者它碰巧出错了,那将不会影响另一个 logMessage
所做的事情。