javascript 能打印出对象但是子对象获取不到

具体是在小程序里面onload()方法给页面变量赋值,代码如下:

  onLoad() { 
    console.log('all', app.globalData);
    console.log('app', app.globalData.appinfo.client_id);
    console.log('user', app.globalData.userinfo);

    this.setData({
      nickName: app.globalData.userinfo.nickName,
      avatarUrl: app.globalData.userinfo.avatarUrl
    });
  }

其中打印出来的截图是:

图片描述

请教为什么userinfo获取不到???

回复
阅读 3.7k
2 个回答

console是异步的,也就是当你按对象箭头的时候,会再次请求数据,所以,你点开的时候userinfo是存在的,但是你在页面上获取的时候,其实是有数据获取延迟的,你设置settimeout延迟3秒再获取试试,应该能获取到;
我之前也遇到过这个问题,最终的解决方案是,不在页面js中获取数据,而是采用一个utils下的js来获取数据再返回一个方法,然后在页面onload的时候调这个方法,然后将返回的值赋值给页面data,然后在页面上直接取值就行,你要是非得处理数据,建议在wxs文件声明函数来处理,在页面js中是会有数据延迟的;
举个例子:
比如我的购物车的数据是需要实时变化的,所以,我写了一个shopping-cart.js的文件在utils下面,sc就是购物车所包含的页面需要的所有数据

clipboard.png

然后通过下面这种方法返回sc数据
clipboard.png
页面调用的时候只需要

clipboard.png

clipboard.png

然后,如果你需要处理返回的数据,就在wxs文件中写一个函数,处理就行;

clipboard.png

你没有调用获取 userinfo 的接口呀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏