作业遇到问题的总结
发布于 3 年前 作者 zfu 1008 次浏览 来自 分享

一开始发现这个问题的时候,
图①↓

我先是把回调函数改了,然后出现新的状况,
图②↓

后面发现问题关键在我用了wx.getStorage,如果改用wx.getStorageSync,上面的情况就没有再出现了。

还有,下面是在一个异步函数里面的语句,也出现了类似的情况:
图③↓

找了关于js的异步的资料,重新看了这两个问题(不知道有没有理解对):
图①的wx.getStorage是异步获取缓存,调用它的时候几乎同时会继续执行下面的语句,而执行下面语句时wx.getStorage还没有执行成功,也就没有执行成功回调函数,所以结果是song is not defined

图②和图③的问题很相似,先打印的this.data的song非空但后打印的this.data.song是空,this.backgroundAudioManager也同样的情况。

查到资料有说,在某些情况下,console.log并不会直接输出内容(尤其是在输出对象的时候)。浏览器在后台异步处理控制台I/O能够提高性能,因此,在看到输出时,很有可能已经执行了其他语句。

根据这个资料,大概可以这样解释出现的现象:
图②图③的第一个console.log打印的是对象,浏览器后台进行异步处理,这个过程中前面的(指图②,wx.getStorage执行完成,并赋给data的song)或者后面的语句(指图③,src赋值)完成赋值,显示非空,第二个就直接打印,则显示为空。

如果我理解不对,请指出来,谢谢!

回到顶部