[003]小程序系列 | 云函数调用成功却返回null?不按照常理出牌?

目录

 

一、问题简述

二、寻找原因 

2.1函数详情

2.2异步问题

三、验证结果

四、结论

getWXContext函数是异步的,需要通过await等待其的返回!!!


一、问题简述

云函数login,想必是小程序开发者在开发的时候经常用于获取小程序用户信息的云函数我的login具体结构如下:

下面附上一条小程序官网提供的《获取小程序用户信息》 里面有怎样获取用户信息

现在我们根据官网模板修改login/index.js,具体如下: 

现在我们开始调用,调用代码如下:

// --------------------上面代码省略
wx.cloud.callFunction({
    name: 'login',
    data:{},
    success: res => {
        console.log('------------------',res)
        this.globalData.openid = res.result.OPENID
    },
    fail: err => {
        console.error('[云函数] [login] 调用失败', err)
    }
})
// --------------------下面代码省略

发现一直获取不到数据(即result 为空),错误如下:

 

二、寻找原因 

返回信息里面:errMsg: "cloud.callFunction:ok"说明云函数调用成功,也就是说明index.js代码里面没有问题,我们查看了日志更加说明了这一点(调用成功,返回结果为null),具体日志如下:

 

2.1函数详情

 既然函数调用成功,并且返回为空,那么现在只能通过函数里面的返回值去查找答案了,上面函数我们在里面仅仅调用了一个"wx.server.sdk"提供的getWXContext函数,现在我们搜索一下关于getWXContext函数的具体信息,官方描述如下《Cloud.getWXContext(): Object》

 发现官方文档仅仅是说了两个需要注意的事情:

  1. 返回值
  2. 不要在 exports.main 外使用 getWXContext,此时尚没有调用上下文,无法获取得到信息

上面并没有我们解决办法的信息... 

 

2.2异步问题

函数详情并没有找到相应的解决办法,可是在查阅官方文档的过程中,我发现了一个问题=>《异步API》描述如下:

看到这里,我在想:是不是因为getWXContext函数是异步获取的,从而导致返回为空!!!

 

三、验证结果

 我们修改一下我们的代码(添加了async&await):

// index.js
const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
  // 这里获取到的 openId、 appId 和 unionId 是可信的,注意 unionId 仅在满足 unionId 获取条件时返回
  let { OPENID, APPID, UNIONID } = await cloud.getWXContext()

  return {
    OPENID,
    APPID,
    UNIONID,
  }
}

通过async&await等待cloud.getWXContext()返回结果 

注意:

在修改了云函数之后必须上传并部署!!!

  • 有通过npm install下载库文件,则需要更新node_modules,即需要上传并部署:所有文件
  • 如果仅仅是修改了index.js这些,直接上传并部署:云函数安装依赖(不上传node_modules)即可

发现问题解决,返回成功!!!

四、结论

getWXContext函数是异步的,需要通过await等待其的返回!!!

  • 32
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值