返回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的建議
參考文件
相關文章
- 如何在函式內部定義函式?函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- 函式內部This的指向問題函式
- 函式內部的變數提升函式變數
- 函式的祕密之 函式返回值函式
- c++內建函式物件C++函式物件
- Python內部函式zip使用Python函式
- 類函式和物件函式 PHP函式物件PHP
- 函式的返回值函式
- javascript學習筆記--函式的返回值可以是一個函式JavaScript筆記函式
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- Swift 函式提前返回Swift函式
- webgl內建函式--指數函式Web函式
- webgl內建函式--通用函式Web函式
- Day 14 匿名函式 內建函式 物件導向程式設計函式物件程式設計
- 函式式的 Promise 對非同步的抽象函式Promise非同步抽象
- 將使用回撥函式作為引數的函式改造為返回 Promise 的一個具體例子函式Promise
- 函式外與函式內的變數函式變數
- JS中函式內套函式的呼叫JS函式
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- 07:函式之函式的引數和返回值函式
- 函式物件、物件、原型函式物件原型
- oracle內部轉換函式雜談Oracle函式
- AWK高階之內部函式使用函式
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- Python 返回函式+匿名函式Python函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- 函式物件、裝飾器、閉包函式函式物件
- JS內建物件,函式與作用域JS物件函式
- 物件,函式作為一個函式的引數物件函式
- 函式返回值1函式
- async、await和generator函式內部原理AI函式
- underscore 系列之內部函式 cb 和 optimizeCb函式
- 內建函式函式
- 函式內聯函式