为什么我在其他页面通过globalData方式,获得的openid为undefined ?

小程序 文章 2020-08-24 09:41 0 83 全屏看文

为什么我在其他页面通过globalData方式,获得的openid为undefined ?Why do I obtain undefined openid through globalData on other pages?

为什么我在其他页面通过globalData方式,获得的openid为undefined ?

如下图,例如在user.js页面

我通过app.globalData来获得全局变量,其中有text和open

但始终open 无法输出出来是什么地方的问题呢


As shown in the following figure, for example, in the user.js Page I pass app.globalData To get the global variables, where there are text and open, but open can't be output all the time. What's the problem

回答:

xy:

通俗一点就是因为你open是异步赋值的 你同步console.log的时候此时open还没有赋值

神奇的桑桑😄😄😄:

楼主遇到的是时序问题,建议阅读开发文档 Api Promise

吃鱼先生:

提示的内容意思大概是"打印的内容只是当前这个值的内容,不一定是打印时这个值的内容"

你试试console.log(JSON.parse(JSON.stringify(app.globalData)))

这样打印出来值的内容,可以保证是你打印时的值的内容

Mu:您给我这个代码 打印出来是空白的
吃鱼先生:因为他打印的时候本来就是没这个值的,自然不会打印出来,
难道你执行console.log(JSON.parse(JSON.stringify(app.globalData)))打印来的东西表明app.globalData里有open?
Mu:那为什么1的globalData能看到open和text,但2打印globalData.open的时候就没了
吃鱼先生:你试试console.log(JSON.parse(JSON.stringify(app.globalData)))
可以保证是你看到的是打印时的值的内容
Mu:???
吃鱼先生:你没理解"打印的时候","你看的时候"的区别?
Mu:感谢细心回复先  但是不明白为什么打印的值和看到的不一样了 或者说 那么我怎么获得这个值呢
吃鱼先生:只有对象会存在这种情况,
因为对象是指针引用,
控制台会显示指针对应的值,
其他的如,字符串,数字等,
是值引用,
控制台显示就是本身的值,
假如你00:00:00的时候打印globalData
在00:00:01的时候globalData.open被赋值了
你00:00:02的时候才去看控制台,
你看到的globalData并不是你打印时(00:00:00)的值,
而是00:00:01的时候globalData被赋的值,
你要怎么取这个值,
看样子,你是异步把globalData.open给改掉了,
没办法在同步流程里获取到globalData.open的.
你需要一个eventBus,
修改globalData.open的时候,
通知你取globalData.open值的地方,
然后就能拿到globalData.open了
Mu:感谢回复了这么多 这些我暂时还不能理解 先记录下 然后研究一下 晚安了

-EOF-