W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
接口方法有同步、異步、回調(diào)、異步回調(diào)四種類型,不同類型的接口方法,提供的能力也不相同。
同步接口會直接返回調(diào)用結(jié)果,結(jié)果可以是任意類型,參見相關(guān)的接口文檔。
console.log(JSON.stringify(app.getInfo()))
異步接口不會立即返回調(diào)用結(jié)果,在異步接口任務(wù)完成后執(zhí)行某些操作,可選擇以下方式之一:
開發(fā)者可以在調(diào)用異步接口的實參中傳遞相應(yīng)的回調(diào)函數(shù);回調(diào)函數(shù)會在接口任務(wù)完成時根據(jù)狀態(tài)執(zhí)行回調(diào)。任意回調(diào)函數(shù)最多執(zhí)行一次
回調(diào)函數(shù) | 參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|---|
success | data | Any | 調(diào)用結(jié)果,可以是任意類型,參見接口使用文檔 | 在調(diào)用成功時回調(diào) |
fail | data | Any | 錯誤信息,一般是描述錯誤信息的字符串,也可以是其他類型,參見接口使用文檔 | 在調(diào)用失敗時回調(diào) |
code | Number | 錯誤代碼,如果文檔未特別說明,會返回200。如果返回其他錯誤代碼,需要在文檔中列舉說明 | 在調(diào)用失敗時回調(diào) | |
cancel | data | Any | 調(diào)用結(jié)果,一般無內(nèi)容,參見接口使用文檔 | 在用戶取消時回調(diào)。部分需要用戶交互的接口調(diào)用中可能提供此回調(diào)支持 |
complete | 無 | 無 | 無 | 在調(diào)用完成時回調(diào) |
success、fail和cancel三個回調(diào)函數(shù)是互斥的,每次接口調(diào)用都會且僅會調(diào)用這三個回調(diào)函數(shù)中的一個,之后會再調(diào)用一次complete回調(diào)。
prompt.showContextMenu({
itemList: ['item1', 'item2'],
itemColor: '#ff33ff',
success: function(data) {
console.log("handling callback");
},
fail: function(data, code) {
console.log("handling fail, code=" + code);
},
cancel: function(data) {
console.log("handling cancel");
},
complete: function() {
console.log("handling complete");
},
})
支持調(diào)用異步接口返回 ?Promise
? 實例,開發(fā)者可以在返回的 ?Promise
? 實例上使用 ?then
?, ?catch
? 方法綁定回調(diào)函數(shù)
?Promise
?實例的狀態(tài)是 resolve(成功)還是 reject(失?。?/b>,依賴于異步接口任務(wù)執(zhí)行的結(jié)果。若任務(wù)成功,則 ?Promise
?實例的狀態(tài)為 ?resolve
?;否則,?Promise
?實例的狀態(tài)為 ?reject
?
使用方法:
只有在調(diào)用異步接口的實參中不傳遞任何回調(diào)函數(shù)時,才會返回一個 ?Promise
?實例
若在調(diào)用異步接口的實參中,某個屬性(如:success)的值為函數(shù),則調(diào)用異步接口的返回值為 undefined,切換至上面介紹的?使用回調(diào)函數(shù)
?模式
因此,在框架中不能同時使用回調(diào)函數(shù)和使用Promise
在 ?Promise
?實例的 ?then
?方法中,可傳入兩個參數(shù):
resolve
?(成功)的回調(diào)函數(shù),對應(yīng)異步接口支持的回調(diào)函數(shù)中的?success
?和 ?callback
?。參數(shù)的 data 屬性為返回的數(shù)據(jù)reject
?(失?。┑幕卣{(diào)函數(shù),對應(yīng)異步接口支持的回調(diào)函數(shù)中的 ?cancel
?或 ?fail
?。失敗的回調(diào)函數(shù)的參數(shù)比成功的回調(diào)函數(shù)多一個 code 屬性,用于判斷具體狀態(tài)。若 code 為 100,對應(yīng) cancel;若 code 大于或等于 200,對應(yīng) failconst promise = prompt.showContextMenu({
itemList: ['item1', 'item2'],
itemColor: '#ff33ff'
})
promise.then(
res => {
console.log(`異步接口返回的數(shù)據(jù):${res.data}`)
},
res => {
console.log(`異步接口返回的數(shù)據(jù):${res.data}`)
console.log(`異步接口返回的狀態(tài)碼:${res.code}`)
if (res.code === 100) {
// 對應(yīng)異步接口支持的回調(diào)函數(shù)中的cancel
} else if (res.code >= 200) {
// 對應(yīng)異步接口支持的回調(diào)函數(shù)中的fail
}
}
)
訂閱接口不會立即返回調(diào)用結(jié)果,開發(fā)者需要在實參中傳遞相應(yīng)的回調(diào)函數(shù);回調(diào)函數(shù)會在接口任務(wù)完成時執(zhí)行回調(diào);由于是訂閱類型,回調(diào)函數(shù)可能執(zhí)行多次
訂閱接口支持的回調(diào)函數(shù):
參數(shù)名 | 類型 | 說明 |
---|---|---|
callback | Function | 回調(diào),每次訂閱的對象變化時,都會被執(zhí)行 |
fail | Function | 失敗回調(diào),返回錯誤信息和錯誤代碼。若文檔未特別說明,錯誤代碼為 200。若返回其他錯誤代碼,參見具體的接口文檔 |
以監(jiān)聽地理位置(geolocation.subscribe)為例:
示例:
geolocation.subscribe({
callback: function(data) {
console.log(
`handling success: longitude = ${data.longitude}, latitude = ${
data.latitude
}`
)
},
fail: function(data, code) {
console.log(`handling fail, code = ${code}`)
}
})
由于異步和訂閱接口不會在調(diào)用后立即返回結(jié)果,而是一段時間后執(zhí)行回調(diào)函數(shù)并攜帶返回結(jié)果作為參數(shù);因此,執(zhí)行回調(diào)函數(shù)時,調(diào)用接口的頁面,會屬于以下三種狀態(tài)之一:
this.$valid && this.$visible
this.$valid && !this.$visible
!this.$valid && !this.$visible
若執(zhí)行回調(diào)函數(shù)時,調(diào)用接口的頁面已隱藏或已銷毀,則存在以下問題:
提示:關(guān)于頁面狀態(tài)$valid
、$visible
,參見 script 腳本
geolocation.getLocation({
success: function(data) {
if (this.$valid && this.$visible) {
// 頁面仍在顯示中
} else if (this.$valid && !this.$visible) {
// 頁面已隱藏
} else {
// 頁面已銷毀
}
}.bind(this),
fail: function(data, code) {
console.log(`handling fail, code = ${code}`)
}
})
訂閱接口的回調(diào)函數(shù)可能會被多次調(diào)用。若頁面已隱藏或已銷毀,仍繼續(xù)訂閱,既會影響框架的響應(yīng)速度,也會造成內(nèi)存泄露。因此,建議在頁面被銷毀后取消訂閱
在頁面銷毀后取消訂閱有以下兩種方式:
示例:
export default {
onDestroy() {
// 方式一:在頁面生命周期onDestroy中取消訂閱
geolocation.unsubscribe()
},
onReady() {
// 訂閱,監(jiān)聽地理位置
geolocation.subscribe({
callback: function(data) {
// 方式二:在訂閱接口的回調(diào)函數(shù)中,先判斷頁面狀態(tài),若頁面已被銷毀,取消訂閱
if (!this.$valid) {
geolocation.unsubscribe()
}
console.log(
`handling success: longitude = ${data.longitude}, latitude = ${
data.latitude
}`
)
}.bind(this),
fail: function(data, code) {
console.log(`handling fail, code = ${code}`)
}
})
}
}
注:若在應(yīng)用生命周期中調(diào)用訂閱接口,只要應(yīng)用仍然在運行,訂閱都是有效的;建議當(dāng)不再需要訂閱時,主動取消訂閱
部分接口因為涉及到安全和隱私問題,增加了權(quán)限控制,調(diào)用時會出現(xiàn)用戶授權(quán)彈窗,待用戶授權(quán)后才能繼續(xù)執(zhí)行。 權(quán)限控制有兩種模式,一種是每次調(diào)用都需要授權(quán),一種是授權(quán)后記住保存狀態(tài),下次調(diào)用不再需要重復(fù)授權(quán)。
代碼 | 含義 |
---|---|
200 | 一般性錯誤 |
201 | 用戶拒絕 |
202 | 參數(shù)非法 |
203 | 服務(wù)不可用 |
204 | 請求超時 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: