本文共 835 字,大约阅读时间需要 2 分钟。
如题,函数内部实现记得加try catch的具体意思是,在函数的实现流程中,最外层需要加个try catch并在catch中调用reject(err)接口,确定返回的promise是有回调的。本质需求是函数的所有分支的结束需要调用resolve或reject,确保你的promise是有回调的,否侧你是给自己或者团队成员挖坑了!
代码示例//ts代码public async fun() : Promise{return new Promise ( async(resolve, reject) => { //最外层 try { resolve("ok") } catch (e) { reject(e) }}}
如下截图来自
如果在微信小程序开发者工具的console中看 “Uncaught (in promise) thirdScriptError” 就意味着你们代码中或调用的接口(第三方SDK)使用Promise时没有使用try catch了建议:有关Promise的最佳实践,推荐大家一起来学习我下面收集的文章(参考文档
在修复 后,测试同事反馈 SDK的某些接口在断网的时候调用没有返回值(没有相关的日志输出),然后自己去撸SDK的代码。由于之前也不是专门写JS代码的,同时对SDK的业务逻辑也不熟悉,所以还是采用了较低效的日志输出,去查排查问题的代码点。因为方法的内部流程中又调用了返回值是promise的接口,即promise是多层嵌套的 (这个当时头就大了,直觉告诉我,这不可能是最佳实践呀!)
在二分法的原侧下不断的加日志输出,最后定位到是嵌套的第二层promsie的函数内部没有加try catch,然后在断网的情况下,触发了逻辑上的异常,导致没有reject或resolve的回调。最终最外层的接口亦没有回调。如下是网上有关嵌套promise的建议
转载地址:http://ekmbi.baihongyu.com/