html52.com
我爱小程序-开发者交流社区

wx.getSetting()方法是异步么?为何会导致死循环呢

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug wx.getSetting() 工具 6.6.0 1.9.1

我有尝试将这个授权作为一个单独的方法,并通过一个简单的while循环来进行保证最后的结果一定是用户授权,可是最后却发现会导致死循环,代码会一直console.log(userInfo),代码块如下:

function checkSetting() {
  var userInfo = false
  while (!userInfo) {
    console.log(userInfo)
    wx.getSetting({
      success: res => {
        console.log("res.authSetting['scope.userInfo']="+res.authSetting['scope.userInfo'])
        userInfo = res.authSetting['scope.userInfo']
      }
    })
    //如果没有获取到授权
    if (!userInfo) {
      wx.showModal({
        title: '提示',
        content: '为保证程序正常运行,请允许小程序获取您公开的用户信息',
        showCancel: false,
        confirmText: '去授权',
        success: res => {
          if (res.confirm) {
            wx.openSetting({
              success: res => {
                console.log("2es.authSetting['scope.userInfo']=" + res.authSetting['scope.userInfo'])
                userInfo = res.authSetting['scope.userInfo']
              }
            })
          }
        }
      })
    }
  }

}




网友回复

暴沸:

这个也不能怪我吧  我不知道getSetting是异步的啊。。。后来我发现cpu占用越来越高 我就猜到肯定是死循环了,代码已经改好了。

马农™:

必须死循环啊,getSettting是异步操作,最后if那一段,应放在getSetting的success回调中,如果想强制让用户授权,你可以写个递归,回调这一段逻辑,但最好加个次数限制

You can you up:

我擦你这有毒啊,别用while用回调

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付