问题模块 | 框架类型 | 问题类型 | 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用回调