JavaScript 的回调可能直接返回值、同步抛错,也可能返回 Promise。Promise.try() 把这几种情况接进同一条 Promise 链:返… · @BaiBtw · TwKit
@BaiBtw
JavaScript 的回调可能直接返回值、同步抛错,也可能返回 Promise。Promise.try() 把这几种情况接进同一条 Promise 链:返回普通值就兑现,同步抛错就拒绝,返回 Promise 则跟随它的最终结果。 例如 Promise.try(loadData, userId).then(render).catch(showError),无论 loadData 是同步读取还是异步请求,后面都能沿用同一套结果和错误处理;参数直接传进去,不必额外包一层箭头函数。 这里容易混淆的是调用时机。Promise.resolve(loadData()) 会先执行 loadData,同步抛错时还没进入 Promise 链,后面的 catch 接不到。Promise.resolve().then(loadData) 能把抛错变成拒绝,但会异步调用回调;Promise.try(loadData) 则立即调用。 它也不替代 async/await:在 async 函数里用 try/catch 包住 await,同样能统一处理同步与异步失败。Promise.try() 已进入 Baseline 2025,旧浏览器或旧运行时仍要检查支持情况。
曝光 26 · 评论 2 · 点赞 2 · 书签 0
查看原帖