JS回调函数对变量赋值无效

吏小加
  • 16

在开发微信小程序的时候,出现了诡异的现象
参考代码如下:

//在函数外部声明两个变量
var userName,portrait;
wx.getUserInfo({
    success: function (res) {
        var userInfo=res.userInfo;
        //变量可以正常传递到wx.getUserInfo函数中被赋值
        userName=userInfo.nickName;
        portrait=userInfo.avatarUrl;
    }
});
this.database.collection("Comment").add({
    data: {
        //问题点:编辑器提示变量尚未初始化
        userName: userName,
        portrait: portrait
    }
});

已经将问题点在代码中用注释标识出来,
编辑器提示Variable might not have been initialized,
为什么在回调函数中对变量赋值无效?如何解决?

回复
阅读 4.5k
3 个回答

在success回调的时候,就调用保存函数

wx.getUserInfo是异步
下面的函数取值userName时还是undefined

小demo
  • 3
新手上路,请多包涵

可以理解为同步异步问题。wx.getUserInfo是异步给全局变量赋值的。在执行this.database.collection时全局变量的值还是初始化时候的值(全局变量只做了声明未被初始化也就是undefined)。

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