• 用户授权,glodalData.userInfo为undefined?


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 m0_62833091 2024-06-09 13:31 采纳率: 27.3% 浏览 1 首页/ 小程序 / 用户授权,glodalData.userInfo为undefined? 微信小程序 app.js异步问题,在我的页面中,可以拿到app.globalData的信息,但是app.globalData.userInfo拿不到,下面是全部代码,要怎么改?求帮助 app.js代码: // app.js App({ onLaunch:async function () { if (!wx.cloud) { console.error('请使用 2.2.3 或以上的基础库以使用云能力'); } else { wx.cloud.init({ env: 'yingshiji-1g4z5k3lc74cf9e2', traceUser: true, }); } this.globalData = {}; await this.loadUserInfo(); console.log('是否有openid',this.globalData.openid); console.log('是否有用户信息',this.globalData.userInfo); }, async loadUserInfo(){ var that = this; //获取用户的openid let useropenid = await wx.cloud.callFunction({ name:'logins', }) console.log('获取openid',useropenid); that.globalData.openid = await useropenid.result.appid; return await wx.cloud.database().collection('login').where({ _openid:'that.globalData.openid' }).get().then(res=>{ console.log(res); that.globalData.userInfo = res.data[0]; }) }, is_login(){ console.log(this.globalData.userInfo); if (this.globalData.userInfo) { return true } else { return false } }, }) login WXML代码
    login .js代码 ```javascript // pages/login/login.js const app = getApp(); const db = wx.cloud.database(); Page({ data: { }, onLoad(options) { }, // 获取头像 getAvatar(event) { console.log(event.detail.avatarUrl); //临时头像路劲地址 let avatarUrl = event.detail.avatarUrl; //临时地址 let suffix = /\.[^\.]+$/.exec(avatarUrl)[0]; wx.cloud.uploadFile({ cloudPath: 'loginImages/' + new Date().getTime() + suffix, filePath: avatarUrl //上传到云端的路劲, }).then(res => { console.log(res.fileID); this.setData({ avatarUrl: res.fileID }) }) }, login(event) { var that = this; console.log(event.detail.value.nickName); let nickName = event.detail.value.nickName; // let avatarUrl = that.data.avatarUrl; if (!nickName) { wx.showToast({ title: '请填写昵称', icon: 'error' }) return } if (!this.data.avatarUrl) { wx.showToast({ title: '请上传头像', icon: 'error' }) return } console.log(app.globalData.openid); db.collection('login').where({ _openid: app.globalData.openid }).get().then(res => { console.log(res) if (res.data.length == 0) { //添加记录到数据库 db.collection('login').add({ data: { num: Date.now(), //!QQ号 avatarUrl: that.data.avatarUrl, nickName: nickName }, success(res) { console.log(res) wx.showToast({ title: '登陆成功', }) setTimeout(function () { wx.navigateBack({}) }, 1500) } }) } else { console.log("用户已存在") that.setData({ userInfo: res.data[0] }) } }) } }) 我的页面user-center。WXML代码: ```xml 用户名:{{nickName}} 用户ID:dfd9765490 点击登录 登录获取更多权限 余额:¥ 0 元 充值 我发布的信息 我的页面user-center.js代码: // pages/user-center/user-center.js const app = getApp(); const db = wx.cloud.database(); Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { console.log('是否有app信息',app.globalData)// 有app的信息 console.log('是否有用户信息',app.globalData.userInfo)// 获取用户信息和openid为undefined console.log(app.is_login()); if(app.is_login()){ this.setData({ userInfo: app.globalData.userInfo, avatarUrl: app.globalData.userInfo.avatarUrl, nickName: app.globalData.userInfo.nickName }) } }, onuserInfo(){ wx.navigateTo({ url:'/pages/login/login' }) }, }) 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • 阿里嘎多学长 2024-06-09 13:46
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      根据您提供的代码和描述,您遇到的问题主要是globalData.userInfo获取为undefined。以下是一些可能的原因和建议的解决方案:

      1. 异步操作顺序问题: 在onLaunch函数中,您使用了await来加载用户信息,但是await之后的代码可能在loadUserInfo函数执行完成之前就执行了。这可能导致globalData.userInfo尚未被设置。

        解决方案:确保await this.loadUserInfo();onLaunch函数中是最后一个执行的语句,并且在其之后不要立即访问globalData.userInfo

      2. loadUserInfo函数中的错误: 在loadUserInfo函数中,您使用了that.globalData.openid,但是that可能没有正确指向App实例。

        解决方案:使用this.globalData.openid代替that.globalData.openid

      3. 数据库查询条件错误: 您在查询数据库时使用了where方法,但是条件中的_openid值可能不正确。图片中显示的openidwx990cfc380f474695,但是在查询时您使用了that.globalData.openid,这可能不是正确的值。

        解决方案:确保查询时使用的_openid值是正确的,并且与用户实际的openid匹配。

      4. is_login函数中的逻辑问题is_login函数中直接返回了this.globalData.userInfo的值,如果globalData.userInfoundefined,它也会返回undefined

        解决方案:在is_login函数中添加一个检查,确保globalData.userInfo不是undefined

      5. user-center.js中的访问时机问题user-center.js中的onLoad函数可能在globalData.userInfo设置之前被调用。

        解决方案:您可以考虑在onLoad函数中添加一个延时或者使用页面的onShow生命周期函数来确保globalData.userInfo已经被设置。

      6. setData方法的使用: 在login函数中,您使用了this.setData来设置userInfo,但是this可能指向的是页面实例而不是App实例。

        解决方案:确保在login函数中使用正确的this来设置globalData.userInfo

      7. 代码中的其他潜在问题

        • 检查login函数中是否正确处理了数据库操作的异步性。
        • 确保login函数在添加新用户或更新现有用户信息后正确地更新了globalData.userInfo

      最后,关于参考资料,您可以查阅微信小程序的官方文档,特别是关于全局数据管理云函数调用的部分。

      希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多的信息,以便进一步分析。

      展开全部

      评论 编辑记录
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      图解MySQL的binlog、redo log和undo log
      删除vxe-table右上角的工具栏
      迪杰斯特拉算法(Java)
      【全栈开发指南】Mysql8 开启远程登录(docker-compose安装 )
      第十届全球云计算大会 | 华云数据荣获“2013-2022十周年特别贡献奖”
      Security开启csrf防护后没有办法获取_csrfToken
      JavaEE 网络原理——TCP的工作机制(中篇 三次握手和四次挥手)
      golang的垃圾回收算法之一基本介绍
      2022-11-21 mysql列存储引擎-缓存心血积累
      CDH大数据平台 ModuleNotFoundError: No module named ‘MySQLdb‘
    • 原文地址:https://ask.csdn.net/questions/8116119