收藏
回答

app.js获取openid到globalData下,方便其他js页面直接使用

我想要在app.js页面直接获取用户的open_id,这样就不用每个页面获取一次。问题是一直不能存进去。萌新,同学说是异步问题 我试了好多遍也没得存进去。


结果是没变。。


最后一次编辑于  2018-12-08  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

7 个回答

  • z
    z
    10-29

    老铁你的小程序是从哪个开源项目开发的呐

    10-29
    赞同
    回复
  • 简单的昵称
    简单的昵称
    2018-12-11

    app.js里面怎么可能直接调微信获取openid接口?这个接口应该通过后台调吧,或者走云开发

    2018-12-11
    赞同
    回复 1
    • 黄金儿
      黄金儿
      2018-12-11

      可以调的。。掉成功了。我走云开发的,vue

      2018-12-11
      回复
  • 97
    97
    2018-12-10

    不是它的异步难懂,app.js这个文件很多时候就是个弟弟。

    2018-12-10
    赞同
    回复 1
    • 黄金儿
      黄金儿
      2018-12-10

      唉 遭重

      2018-12-10
      回复
  • 老张
    老张
    2018-12-09

    最好不要放在global里,这样每次onLaunch都要后台(或者云函数)取一次openid,openid这个值最好放在storage里,因为openid是永久不变的,取一次就行了。

    我的代码是这样的:

    this.openid = wx.getStorageSync('openid') || await app.getOpenid()


    app.js里是这样的:

    getOpenid: async function(){

        let res = await wx.cloud.callFunction({ name: 'login' })

        wx.setStorageSync('openid', res.result.openid)

        return res.result.openid

    },



    2018-12-09
    赞同
    回复 3
    • 黄金儿
      黄金儿
      2018-12-09

      那我之后要在别的页面使用 是不是就是 var open=getApp().getOpenid()就可以了?

      2018-12-09
      回复
    • 老张
      老张
      2018-12-09回复黄金儿

      你这样调用,不还是要重新取一次openid吗?


      任何页面这样调用:

      const app = getApp()

      this.openid = wx.getStorageSync('openid') || await app.getOpenid()

      先取storage,如果没有的话,调用app.getOpenid

      2018-12-09
      回复
    • 黄金儿
      黄金儿
      2018-12-10回复老张

      谢谢了!

      2018-12-10
      回复
  • ==
    ==
    2018-12-08

    异步的问题。。你在其他页面引用的时候打印应该就好了。。。。

    2018-12-08
    赞同
    回复 3
    • 黄金儿
      黄金儿
      2018-12-08



      其他页面用不了

      2018-12-08
      回复
    • ==
      ==
      2018-12-08回复黄金儿

      把data里面的openid赋值给删了。,,然后你在onshow里面打印 console.log(app.globalData.openid)试试

      2018-12-08
      回复
    • 黄金儿
      黄金儿
      2018-12-08回复==

      应该是时间差的问题。
      重新在onLoad下setdata就有了 谢谢了

      2018-12-08
      回复
  • 管凯旋
    管凯旋
    2018-12-08

    下面执行的比上面早鸭,,

    2018-12-08
    赞同
    回复 4
    • 黄金儿
      黄金儿
      2018-12-08

      在then里面数据存进去了 我重新在别的页面调用 显示 还是1

      2018-12-08
      回复
    • 管凯旋
      管凯旋
      2018-12-08回复黄金儿

      别的页面是tab页面吧,tab页和app.js也是异步的,在执行的时候可能你这个方法还没执行,按照你这种写法你需要再写个promise确保在使用的时候你存的操作已经执行了

      2018-12-08
      回复
    • 黄金儿
      黄金儿
      2018-12-08回复管凯旋

      不是tab 就普通的页面。打算做一个创建团队/加入团队,要用到openid 所以在想能不能用全局 直接过来。这个是毕设,之前也没学过,也是这几天自己琢磨的。代码可能会比较傻,但还是有功能。就是微信小程序这个异步真的是有点难懂。
      这里直接通过openid 在云开发数据库找到 显示。现在就是想便捷的获取到用户的openid

      2018-12-08
      回复
    • 黄金儿
      黄金儿
      2018-12-08回复管凯旋

      已经有了。谢谢谢

      2018-12-08
      回复
  • 依来夏
    依来夏
    2018-12-08

    onLaunch里的log打印早了,应该放到then回调里面。

    2018-12-08
    赞同
    回复 6
    • 黄金儿
      黄金儿
      2018-12-08


      then里面是有的 出去就没了

      2018-12-08
      回复
    • 依来夏
      依来夏
      2018-12-08

      52行有打印出来就说明已经设置上了,你在其他什么地方用到了?

      2018-12-08
      回复
    • 黄金儿
      黄金儿
      2018-12-08回复依来夏



      其他页面用不了

      2018-12-08
      回复
    • 依来夏
      依来夏
      2018-12-08

      我猜是时间差问题,onLoad里换成 console.log(app.globalData.openid)



      2018-12-08
      回复
    • 黄金儿
      黄金儿
      2018-12-08回复依来夏


      有了有了 我在onload下面 重新setdata一下

      2018-12-08
      1
      回复
    查看更多(1)