小程序Page里的函数比app.js先执行的解决办法

app.js一般里面都写的wx.login函数。页面里的onload,onshow都写的接口。等数据。

app.js不先执行,onload里面的数据就会因为没有获取到app.js里的东西而报错。

解决方案:写一个回调函数,onload里获取不到东西就一直获取,不执行下一步操作。直到获取到app.js的数据才继续执行。

下面,我把回调函数的关键代码及示例讲解一下。

回调函数代码:

app.js里写

if (that.callback) { //这个函数名字和你定义的一样即可
that.callback() //执行定义的回调函数
}

page页面里写:

if () {
//判断有没有你要的 没有说明还没返回或者是失败了

    } else { 
//这个是时候我们在app的config里定义一个函数 给请求成功后调用
      app.callback = () => {
            
      };
    }

 

示例及讲解

我写到onload里了。其实就是一个if-else语句。

我这里写的是

if (app.js里的session存在){

就执行保存到data里的操作

}else{

就去app.callback 接着获取,直到获取成功,再执行保存

}

注意:if  和else 里需要执行的代码是一样的。复制就行了。

onLoad: function (options) {
    var that = this;
    if (app.globalData.session) {//判断有没有你要的 没有说明还没返回或者是失败了
      console.log('第一次回调', app.globalData.session);
      that.setData({
        session: app.globalData.session,
      })
    } else { //这个是时候我们在app的config里定义一个函数 给请求成功后调用
      app.callback = () => {
        console.log('再次回调', app.globalData.session);
        that.setData({
          session: app.globalData.session,
        })
      };
    }
    if(that.data.session !=''){
        wx.request()//执行接口
    }
},

app.js里,把一个 if语句写到 需要执行回调的那句话下面。callback 那个单词是自己命名就可以,但是需要和上面page里名字一致。

.......
that.globalData.session = res.data.data.session
if (that.callback) { //这个函数名字和你定义的一样即可
that.callback() //执行定义的回调函数
}
.....

好了,这样的话,代码执行顺序就变成了,app.js 执行完,onload获取到了数据才会往下继续。

如果有什么不懂,欢迎留言,或者扫码提问。

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值