【发布时间】:2022-12-20 01:50:34
【问题描述】:
我有以下代码:
但目前没有以任何方式处理错误。用这样的 try-catch 包围那段代码是否正确:
【问题讨论】:
-
是的,这是正确的做法。
await将承诺拒绝变成异常。
标签: javascript
我有以下代码:
但目前没有以任何方式处理错误。用这样的 try-catch 包围那段代码是否正确:
【问题讨论】:
await 将承诺拒绝变成异常。
标签: javascript
try/catch 是从Promise.all 捕获错误的正确方法,但与此同时,一旦只有一个请求失败,它将忽略所有已完成的请求,如果您仍然希望拥有其他成功请求的数据,这并不理想记录错误,所以我建议你使用Promise.allSettled
使用此解决方案,它将保留所有请求,包括失败的请求和成功的请求
const [groupedMeditations, meditationPreferences] = await Promise.allSettled([
getMeditationsByGroup(),
getAllPreferences(),
]);
一个可能的结果可以是
[
{status: "fulfilled", value: "successful value"}, // your 1st request passed
{status: "rejected", reason: "Error: an error"} //your 2nd request failed
]
从该响应中,您可以过滤或记录错误
一方面请注意 Promise.allSettled 不适用于 IE,因此您需要 polyfill 来克服它
希望这对您的情况有帮助:D
【讨论】:
Promise.allSettled 没有所谓的失败,所有请求都是分开的(不按顺序)。成功者的状态为fulfilled,失败者的状态为rejected@Bobimaru