API
小程式開發框架提供豐富的微信原生 API,可以方便的調起微信提供的能力,如獲取用戶資訊,本地存盤,支付功能等,詳細介紹請參考 API 檔案,
通常,在小程式 API 有以下幾種型別:
事件監聽 API
我們約定,以 on 開頭的 API 用來監聽某個事件是否觸發,如:wx.onSocketOpen,wx.onCompassChange 等,
這類 API 接受一個回呼函式作為引數,當事件觸發時會呼叫這個回呼函式,并將相關資料以引數形式傳入,
代碼示例
wx.onCompassChange(function (res) {
console.log(res.direction)
})
同步 API
我們約定,以 Sync 結尾的 API 都是同步 API, 如 wx.setStorageSync,wx.getSystemInfoSync 等,此外,也有一些其他的同步 API,如 wx.createWorker,wx.getBackgroundAudioManager 等,詳情參見 API 檔案中的說明,
同步 API 的執行結果可以通過函式回傳值直接獲取,如果執行出錯會拋出例外,
代碼示例
try {
wx.setStorageSync('key', 'value')
} catch (e) {
console.error(e)
}
異步 API
大多數 API 都是異步 API,如 wx.request,wx.login 等,這類 API 介面通常都接受一個 Object 型別的引數,這個引數都支持按需指定以下欄位來接收介面呼叫結果:
Object 引數說明
| 引數名 | 型別 | 必填 | 說明 |
|---|---|---|---|
| success | function | 否 | 介面呼叫成功的回呼函式 |
| fail | function | 否 | 介面呼叫失敗的回呼函式 |
| complete | function | 否 | 介面呼叫結束的回呼函式(呼叫成功、失敗都會執行) |
| 其他 | Any | - | 介面定義的其他引數 |
回呼函式的引數
success,fail,complete 函式呼叫時會傳入一個 Object 型別引數,包含以下欄位:
| 屬性 | 型別 | 說明 |
|---|---|---|
| errMsg | string | 錯誤資訊,如果呼叫成功回傳 ${apiName}:ok |
| errCode | number | 錯誤碼,區域分 API 支持,具體含義請參考對應 API 檔案,成功時為 0, |
| 其他 | Any | 介面回傳的其他資料 |
異步 API 的執行結果需要通過 Object 型別的引數中傳入的對應回呼函式獲取,部分異步 API 也會有回傳值,可以用來實作更豐富的功能,如 wx.request,wx.connectSocket 等,
代碼示例
wx.login({
success(res) {
console.log(res.code)
}
})
異步 API 回傳 Promise
基礎庫 2.10.2 版本起,異步 API 支持 callback & promise 兩種呼叫方式,當介面引數 Object 物件中不包含 success/fail/complete 時將默認回傳 promise,否則仍按回呼方式執行,無回傳值,
注意事項
- 部分介面如
downloadFile,request,uploadFile,connectSocket,createCamera(小游戲)本身就有回傳值, 它們的 promisify 需要開發者自行封裝, - 當沒有回呼引數時,異步介面回傳 promise,此時若函式呼叫失敗進入 fail 邏輯, 會報錯提示
Uncaught (in promise),開發者可通過 catch 來進行捕獲, - wx.onUnhandledRejection 可以監聽未處理的 Promise 拒絕事件,
代碼示例
// callback 形式呼叫
wx.chooseImage({
success(res) {
console.log('res:', res)
}
})
// promise 形式呼叫
wx.chooseImage().then(res => console.log('res: ', res))
云開發 API
開通并使用小程式云開發,即可使用云開發API,在小程式端直接呼叫服務端的云函式,
代碼示例
wx.cloud.callFunction({
// 云函式名稱
name: 'cloudFunc',
// 傳給云函式的引數
data: {
a: 1,
b: 2,
},
success: function(res) {
console.log(res.result) // 示例
},
fail: console.error
})
// 此外,云函式同樣支持promise形式呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253998.html
標籤:其他
上一篇:C++中實作回呼的幾種優雅的方式
下一篇:機試第7天 可能用到的檔案操作
