Promise.then方法第二个参数传入空函数()=>{}有什么作用
Promise 链式调用中
.then() 第二个空函数的作用 首先明确Promise原生then方法的参数规则:.then(成功回调, 失败回调),两个参数都是可选的,第二个传入的函数会在当前Promise链进入 rejected(失败拒绝) 状态时触发。
你看到的这个() => {}空箭头函数,核心作用只有两个:
- 吞掉前置链路的所有错误:只要
someFunction()执行失败(比如支付接口请求报错、网络超时)、或者unwrapResult处理返回值时抛出异常(比如返回值格式不符合预期、业务状态码是失败态),整个Promise链就会走到失败分支。因为这个空函数里没有任何逻辑,既不会执行成功分支里的路由跳转,也不会做其他操作,相当于支付流程出错后直接停留在当前页面。 - 阻止全局未捕获错误报错:如果Promise进入rejected状态后,整条链路没有任何对应的错误处理逻辑,JS运行环境会抛出
Uncaught (in promise)的全局错误,轻则控制台飘红,重则触发前端监控的异常报警,甚至在部分配置了全局错误兜底的项目里导致页面白屏。传入这个空函数相当于告诉引擎“这个错误我已经处理过了”,就不会再抛出全局未捕获错误。
注意:这是一种非常偷懒的负面实践,本质是开发为了不处理错误、又不想控制台飘红写的凑数逻辑。这种写法会把支付流程所有可能的错误全部静默吃掉,用户点击支付后如果失败,得不到任何加载提示、错误弹窗,点了按钮完全没反应,体验非常差。正常业务逻辑里至少应该在这里加错误提示、埋点上报逻辑,绝对不应该直接留空。
额外提一个容易混淆的细节:这个写在then第二个参数位置的失败回调,只能捕获它前面链路抛出的错误,捕获不到同个then里第一个成功回调(也就是这段代码里的路由跳转逻辑)抛出的错误,如果要覆盖跳转逻辑本身的异常,需要在后面额外链式调用.catch()。
内容的提问来源于stack exchange,提问作者Roma N
相关产品推荐
相关产品推荐

