美文网首页
小程序app.js异步请求+动态配置全局数据

小程序app.js异步请求+动态配置全局数据

作者: wyc0859 | 来源:发表于2019-03-25 16:51 被阅读0次

    app.js 若用缓存做全局配置

    //app.js
    App({
      onLaunch: function(options) {
        const that = this 
    
        wx.setStorageSync('a', '111')  
        wx.request({
          url: 'www.xx.com',
          success: function (res) {
            wx.setStorageSync('a', '222') 
          }
        })
      },
    

    第一次加载index页面结果为111,点其他页面后再点击回来结果就是222,若是直接返回结果还是111
    原因:因为请求是异步的,当再次加载页面,缓存才会是新的数据

    //index.js
    onLoad(){ 
        const a= wx.getStorageSync('a')
        console.log('a:',a)
      },
    

    app.js 异步请求函数全局配置

    //app.js
    App({
      onLaunch: function(options) {
      },
    
      wxLogin() { 
        let that = this;
        return new Promise((resolve, reject) => {
          wx.request({
            url: 'www.xx.com',
            success: function(res) {
               that.globalData.web_name = '222'
               resolve(res.data)
            }
          })
        })
      }, 
      globalData: {
        web_name: '111'
      }
    })
    

    //index.js
    const app = getApp()
    Page({
      data: {
      },
      onLoad(){ 
         console.log('first:', app.globalData.web_name)     //111
         app.wxLogin().then(res => {      
           console.log('second:', app.globalData.web_name) //222
        });
         console.log('third:', app.globalData.web_name)     //111
      }
    })
    
    first:111
    third:111
    second:222
    
    原因:

    采用app.globalData数据做全局配置
    异步请求数据并不会覆盖之前的数据
    只有在异步请求回调内才是请求的数据
    在app.js的onLaunch方法中调用wxLogin(),也不能全局配置

    在app.js的onLaunch方法中调用

    //app.js
      onLaunch: function(options) {
         const that = this
         this.wxLogin().then(res=>{
              console.log('app:', res.web_name)
              that.globalData.web_name = res.web_name      
          })
      }
    
    //index.js
    onLoad(){
      console.log('index:', app.globalData.web_name)
    }
    

    结果为:

    index: 111
    app: 222
    

    就算是在初始化函数中调用异步,结果还是index.js先输出,异步后输出,异步数据仍然不能覆盖原数据
    请求时做globalData判断,是否请求

    总结

    1、一步就实现异步数据全局调用:未找到解决办法
    2、常用方法为:app.js中做一次请求,需要的页面去调用app.xx().then()方法,获取数据配置该页面。
    3、优点是全局请求一次,数据是实时

    若是在vue中

    //main.js
    //这里的http.get是封装的axios请求
    Vue.prototype.siteinfo=http.get('webinfo').then(res=>{  
       return res.data 
    }) 
    
    //main.js
    mounted() {       
        this.siteinfo.then(res=>{
          console.log('title:',res)   
        })
    }
    

    相关文章

      网友评论

          本文标题:小程序app.js异步请求+动态配置全局数据

          本文链接:https://www.haomeiwen.com/subject/sfsbvqtx.html