等待所有 Promise,无论失败
在您有一系列 Promise 发出可能会遇到失败的网络请求的情况下,您可能更愿意等待所有承诺完成后再继续,即使有些失败。
内置Promise.allSettled 方法提供了一个简单的解决方案:
Promise.allSettled([promise]).then(([result]) => { // Reached regardless of outcome // {status: "fulfilled", value: 33} });
在引入 Promise.allSettled 之前,您可以使用反射函数来实现相同的结果:
const reflect = (p) => p.then( (v) => ({ v, status: "fulfilled" }), (e) => ({ e, status: "rejected" }) ); reflect(promise).then((v) => { console.log(v.status); });
或者,扩展 Reflect 函数以处理一系列 Promise:
function reflect(promises) { return Promise.all(promises.map((p) => { return p.then((v) => ({ v: v, status: "fulfilled" }), (e) => ({ e: e, status: "rejected" })); })); } reflect(promises).then((results) => { var success = results.filter((x) => x.status === "fulfilled"); });
通过利用这些技术,您可以优雅地处理网络故障并确保您的代码继续按预期执行,无论某些承诺是否成功。
以上是即使有些承诺失败,我如何才能等待所有承诺都得到解决?的详细内容。更多信息请关注PHP中文网其他相关文章!