请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问小程序中的全局变量globalData如何存取?

在app.js的globalData中定义一个公共对象userInfo,当程序加载时实现自动登录更新userInfo对象内容,供其他页面之用。

这个异步问题究竟如何解决?小程序官网上也找不到app.globalData相关文档。

请老师和同学们指点一下。

//app.js
App({

  globalData:{
    userInfo:{}
  },

  onLaunch: function () {
    this.getUserInfo()
  },

  async getUserInfo() {
    const res = await wx.cloud.callFunction({
      name: 'login'
    })
    console.log('app::user:', res.result.data[0])
    this.globalData.userInfo = res.result.data[0]
  },
})

在page.js中获取globalData.userInfo

const app = getApp()
let userInfo = {}
Page({
  onLoad: function (options) {
    const app = getApp()
    const globalData = app.globalData
    console.log('page::globalData:', globalData)
    const userInfo = globalData.userInfo
    console.log('page::userInfo:', userInfo)
  },
})

运行结果是:
图片描述

正在回答 回答被采纳积分+3

1回答

谢成 2020-12-10 11:12:13

这个在课程中讲到了,可以这样做:让getUserInfo方法可以返回一个promise对象,然后在调用的地方.then就可以

0 回复 有任何疑惑可以回复我~
  • 提问者 白云南方 #1
    谢谢老师。如果每次都在getUserInfo中访问云数据库,那在page.js中就能实现了。我想在app.onLaunch时一次访问云数据库,将userInfo保存在globalData(全局数据?)中,减少访问云数据库的次数。这个globalData在page中应当如何存取,才能得到其中存储的数据?
    ```
      onLoad: function (options) {
        const globalData = app.globalData
        console.log(globalData)
        console.log(globalData.userInfo)
      },
    ```
    上面是page中的onLoad代码,其结果是globalData中有数据,而globalData.userInfo是空的。
    回复 有任何疑惑可以回复我~ 2020-12-10 12:00:53
  • 谢成 回复 提问者 白云南方 #2
    先判断目前userInfo是否有值,有就直接取,没有就promise.then()中取
    回复 有任何疑惑可以回复我~ 2020-12-10 15:49:32
  • 提问者 白云南方 回复 谢成 #3
    最大的疑问就是globalData有什么作用,为啥有值取不出来,网上都在问这个问题。既然这样,还不如不用,就象你课程里讲的,用本地存储解决,setStorage/getStorage。所以想搞清楚globalData的正确使用姿式。
    回复 有任何疑惑可以回复我~ 2020-12-11 10:03:06
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号