阅读(2924) (14)

QQ小程序 qq.cloud.callFunction

2020-07-10 16:32:56 更新

调用云函数 qq.cloud.callFunction 方法的定义如下:

Cloud.callFunction(object: Object): Promise<Object>

object: Object

属性 类型 默认值 必填 说明
name string 云函数名
data Object 传递给云函数的参数,在云函数中可通过 event 参数获取
config Object 配置

object.config 的结构

属性 类型 默认值 必填 说明
env string 环境 ID,填写后将忽略 init 时指定的环境 ID

返回值

Promise.<Object>

属性 类型 说明
result any 云函数返回的结果
requestID string 云函数执行 ID,可用于日志查询

data 参数说明 在 data 中如果传入了 Buffer 类型的数据,数据在 JSON 序列化的过程中会被转成 {},以小程序端调用为例:

// 小程序端调用
qq.cloud.callFunction({
  // ...
  data: {
    buf: ArrayBuffer // 此处填入了某种方式获取得到的 Buffer 数据,可以是 request 下来的,可以是读文件读出来的等等
  },
})
// 云函数端收到的 event 参数的结构:
{
  "buf": {},
}

这里应当避免传入 Buffer 类型的数据,因为直接传输buffer数组JSON串会让数据体积增大,增加传输耗时,如果需要传递 Buffer,有两种替代的建议方式:

  1. 若 Buffer 较大,可先上传至文件存储空间,然后调用云函数的时候传递 fileID / 文件 URL 而不是 Buffer,再在云函数中下载下来
  2. 若 Buffer 非常小 (如 < 10k),可将 Buffer 转成 base64 再调用

示例代码 假设已有一个云函数 add:

exports.main = (event, context, cb) => {
  return event.x + event.y
}

在小程序端发起对云函数 add 的调用:

qq.cloud.callFunction({
  // 要调用的云函数名称
  name: 'add',
  // 传递给云函数的event参数
  data: {
    x: 1,
    y: 2,
  }
}).then(res => {
  // output: res.result === 3
}).catch(err => {
  // handle error
})