很多快应用的接口不允许后台调用,当遇到用户把快应用退到后台,代码还在执行,正好执行到不允许后台调用的接口就报错。
创建tools.js文件
我们先写个工具文件,用于存储辅助函数
var appShow = true
var startReq = []
// 把需要等待app回到前台的请求的放入数组里
async function awaitAppShow(){
if(appShow){
return true
}else{
return new Promise((resolve, reject) => {
startReq.push(() => {
resolve(true)
})
})
}
}
// 当app回到前台的时候就行执行等待数组
function appShowContinue() {
for (let i = 0; i < startReq.length; i++) {
startReq[i]()
}
startReq = []
}
export default {
awaitAppShow,
appShowContinue,
appShow,
}
使用 global.js创建全局函数
function getGlobalRef() {
return Object.getPrototypeOf(global) || global
}
const quickappGlobal = getGlobalRef()
/**
* 设置全局(被APP与Page共享)数据;
* @param key {string}
* @param val {*}
*/
function setGlobalData(key, val) {
quickappGlobal[key] = val
}
/**
* 获取全局(被APP与Page共享)数据;
* @param key {string}
* @return {*}
*/
function getGlobalData(key) {
return quickappGlobal[key]
}
setGlobalData('setGlobalData', setGlobalData)
setGlobalData('getGlobalData', getGlobalData)
// 引入工具文件并定义全局
import tools from "./utils/tools.js"
setGlobalData('$T', tools);
在app.ux里引入
import "./helper/global.js"
export default {
onCreate() {
console.log("sdjioadjioasdsdsa",$T.appShow)
},
onShow(){
$T.appShow = true
$T.appShowContinue()
},
onHide() {
$T.appShow = false
},
};
使用
由于我们定义了全局函数,所以直接调用await $T.awaitAppShow()即可,例如:
async function preloadAd(){
await $T.awaitAppShow()
require('@service.ad').preloadAd({
...adParams,
success: (data) => {
console.log(data.adList)
prompt.showToast({
message: `success! data=${JSON.stringify(data)}`
})
},
fail: (data, code) => {
console.log(data, code)
prompt.showToast({
message: `fail! data=${JSON.stringify(data)}, code=${code}`
})
}
})
}
15万+

被折叠的 条评论
为什么被折叠?



