背景:在做小程序的时候,有一个shop的接口基本每个页面都要调用,所以把它拿出来,放在App.js下
但在这个过程中,对需考虑全面的问题,做笔记保存。
1.因为只在App.js下,调了shop接口,
而在其他子页面,需用到shop存下的全局变量,所以当次此接口没有成功调用或者异步没有同步快,则会使整个程序。。。
2.尽量存的全局变量要少,精简
解决:
令全局变量初始为null,在之后的页面判断是否存在,不存在就再调一次app.js下的shop接口,否则就不再调用啦~~·
//app.js
const sendAjax = require('./utils/sendAjax.js')
const config = require('./config.js')
const host = config.host
const companyKey = config.companyKey
const mapChange = require('./utils/mapChange.js')
App({
onLaunch: function () {
console.info('小程序启动啦~')
this.getCompanyInfo()
},
onShow: function (path) {
console.log(path)
},
globalData: {
companyData: null
},
/**
* 获取公司信息
*/
getCompanyInfo (cb) {
let that = this
if (that.globalData.companyData) {
cb && cb(that.globalData.companyData)
return
}
let infoOpt = {
url: '/samples/public/shop',
data: {
companyKey
}
}
let infoCb = {}
infoCb.success = data => {
that.globalData.companyData = data.company
cb && cb(data.company)
}
sendAjax(infoOpt, infoCb)
},
sendAjax,
host,
companyKey,
mapChange
})
在子页面,检查是否存在company的值,若没有,就重新调用app.js中的接口
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
App.getCompanyInfo(company => {
this.setData({
num,
name: company.name,
series: company.series
})
})
},