在全局下存全局变量注意点

背景:在做小程序的时候,有一个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
            })
        })


    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值