返回Promise物件的函式,函式內部記得加try catch!
經驗總結
如題,函式內部實現記得加try catch的具體意思是,在函式的實現流程中,最外層需要加個try catch並在catch中呼叫reject(err)介面,確定返回的promise是有回撥的。本質需求是函式的所有分支的結束需要呼叫resolve或reject,確保你的promise是有回撥的,否側你是給自己或者團隊成員挖坑了!
程式碼示例
//ts程式碼
public async fun() : Promise<any> {
return new Promise<any>( async(resolve, reject) => {
//最外層
try {
resolve("ok")
} catch (e) {
reject(e)
}
}
}
如下截圖來自async/await ES6 Promise 的最佳實踐(經驗分享)
如果在微信小程式開發者工具的console中看 “Uncaught (in promise) thirdScriptError”
就意味著你們程式碼中或呼叫的介面(第三方SDK)使用Promise時沒有使用try catch了
建議:有關Promise的最佳實踐,推薦大家一起來學習我下面收集的文章(參考文件
經驗來源
在修復使用SocketTask,棄用wx 後,測試同事反饋 SDK的某些介面在斷網的時候呼叫沒有返回值(沒有相關的日誌輸出),然後自己去擼SDK的程式碼。由於之前也不是專門寫JS程式碼的,同時對SDK的業務邏輯也不熟悉,所以還是採用了較低效的日誌輸出,去查排查問題的程式碼點。因為方法的內部流程中又呼叫了返回值是promise的介面,即promise是多層巢狀的 (這個當時頭就大了,直覺告訴我,這不可能是最佳實踐呀!)
在二分法的原側下不斷的加日誌輸出,最後定位到是巢狀的第二層promsie的函式內部沒有加try catch,然後在斷網的情況下,觸發了邏輯上的異常,導致沒有reject或resolve的回撥。最終最外層的介面亦沒有回撥。
如下是網上有關巢狀promise的建議
參考文件
相關文章
- 如何在函式內部定義函式?函式
- 函式內部This的指向問題函式
- 函式內部的變數提升函式變數
- 函式的祕密之 函式返回值函式
- c++內建函式物件C++函式物件
- 函式的返回值函式
- javascript學習筆記--函式的返回值可以是一個函式JavaScript筆記函式
- Python 返回函式+匿名函式Python函式
- Day 14 匿名函式 內建函式 物件導向程式設計函式物件程式設計
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- Swift 函式提前返回Swift函式
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- 07:函式之函式的引數和返回值函式
- webgl內建函式--通用函式Web函式
- 函式外與函式內的變數函式變數
- 函式物件、物件、原型函式物件原型
- 將使用回撥函式作為引數的函式改造為返回 Promise 的一個具體例子函式Promise
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- 函式物件、裝飾器、閉包函式函式物件
- webgl內建函式--指數函式Web函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- async、await和generator函式內部原理AI函式
- C++ 返回函式指標的函式C++函式指標
- 0305函式返回值函式
- js的函式和物件JS函式物件
- Day10 函式基礎+函式三種定義形式 + 函式的返回值、物件和引數 + 可變長引數函式物件
- C++中函式指標與函式物件C++函式指標物件
- 內建函式函式
- js函式,arguments物件JS函式物件
- 第 8 節:函式-函式巢狀呼叫與返回值函式巢狀
- 『無為則無心』Python函式 — 27、Python函式的返回值Python函式
- 日期加一天的函式函式
- flink的print()函式輸出的都是物件地址而非物件內容函式物件
- 重要內建函式、常見內建函式(瞭解)、可迭代物件、迭代器物件、for迴圈原理、異常捕獲函式物件
- 【Python基礎】Python 函式返回多個值和函式註解Python函式