小程序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获取到了数据才会往下继续。

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

你可能感兴趣的:(小程序)