wx.getSetting()方法是异步么?为何会导致死循环呢
发布于 5 年前 作者 ylong 9722 次浏览 来自 问答

我有尝试将这个授权作为一个单独的方法,并通过一个简单的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']
              }
            })
          }
        }
      })
    }
  }

}


3 回复

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

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

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

回到顶部