收藏
回答

云函数的结果赋值本地后,云函数中打印本地值正常,云函数外打印为undefined?

云函数获取的数据赋值本地后,云函打印正常,但云函数外面打印异常

回答关注问题邀请回答
收藏

2 个回答

  • 任性༄🍎
    任性༄🍎
    2021-08-30

    根据你的log日志和代码截图

    wx.cloud.callFunction({}) 和 console.log('tmp2') 是属于同一个方法内且是同级关系

    由于 wx.cloud.callFunction 是一个异步函数

    所以就会先输出 tmp2,待 wx.cloud.callFunction 执行完毕后,输出 tmp1,赋值是在输出 tmp1的时候才进行赋值

    所以在输出 tmp2的时候,根本还没有赋值,自然就是这个结果

    要想在外边使用 deptInfo,必须得保证 赋值完成后才可以使用

    2021-08-30
    有用 1
    回复 4
    • 张立伟
      张立伟
      2021-08-30
      明白您的意思了,wx.cloud.callFunction({}) 和 console.log(‘tmp2')都在onload中,我一开始在app.js调用的云函数,然后将获得的deptInfo赋值给全局变量,但是在页面中的js调用全局变量时还是undefined。以我上面的写法为例,如何能让云函数最先执行且赋值完成呢?
      2021-08-30
      回复
    • He11o
      He11o
      2021-08-31回复张立伟
      加个延迟 最简单也是最笨的方法
      2021-08-31
      1
      回复
    • 任性༄🍎
      任性༄🍎
      2021-09-03回复张立伟
      两种方法:
      1、使用callback,将wx.cloud.callFunction({})封装到一个方法中,通过callback回调中执行你所需要的方法,这里可以做个优化,在封装的方法中,如果存在,直接返回callback,否则再去获取数据
      2、使用Promise,与callback方法几乎一致,返回方式稍微不同

      加延迟不可取,由于并不能保证什么时间能获取到数据,时间太长,体验非常不好,时间太短,可能还是拿不到值,况且网络环境的好坏更是无法控制
      2021-09-03
      1
      回复
    • 张立伟
      张立伟
      2021-09-15
      感谢,真的感谢,我采用的callback,终于能获取数据了
      2021-09-15
      回复
  • He11o
    He11o
    2021-08-28

    云函数外这个函数在哪里呢?

    2021-08-28
    有用 1
    回复 3
    • He11o
      He11o
      2021-08-28
      也改成that.data
      2021-08-28
      1
      回复
    • 张立伟
      张立伟
      2021-08-28回复He11o
      我没说明白,在onload中调用的云函数,然后云函数里打印正常,但是在onload中云函数外打印本地值时就异常了,我试过了,that和this都不行,哎
      2021-08-28
      回复
    • 张立伟
      张立伟
      2021-08-28
      应该是调用的问题,appdata中显示deptInfo是正常的
      2021-08-28
      回复
登录 后发表内容