支持端:小程序与云函数
小程序支持调用云函数来实现更复杂的业务逻辑。云函数运行在云端,可以被小程序端调用,也可以被其他云函数调用。
调用云函数参数说明
调用云函数时,可以传递以下参数:
data
: 传递给云函数的参数,在云函数中可通过event参数获取
success
: 接口调用成功的回调函数
fail
: 接口调用失败的回调函数
complete
: 接口调用结束的回调函数(调用成功、失败都会执行)
data参数的结构
data参数支持以下属性:
env
: 环境ID,填写后将忽略init时指定的环境ID
返回值说明
云函数调用会返回以下信息:
result
: 云函数返回的结果
requestID
: 云函数执行ID,可用于日志查询
大数据传输处理
如果data中包含大数据字段(建议临界值10KB),建议使用wx.cloud.CDN标记大数据字段。标记后在调用云函数时,该字段的内容将会上传至临时CDN,然后在云函数中接收到的该字段值将是CDN url,可在云函数中下载访问。
这种方式可以:
1. 避免大数据传输造成的性能问题
2. 避免触及调用链路的传输大小限制
Buffer类型数据处理
如果在data中传入了Buffer类型的数据,数据在JSON序列化的过程中会被转成{"type":"Buffer", data:[]}的格式。对于小程序端调用来说:
// 小程序端调用
wx.cloud.callFunction({
// ...
data: {
buf: ArrayBuffer // 此处填入了某种方式获取得到的 Buffer 数据,可以是 request 下来的,可以是读文件读出来的等等
},
})
// 云函数端收到的 event 参数的结构:
{
"type": "Buffer",
"data": [ 17, 371, 255, ... ] // Uint8 Array
}
建议避免传入Buffer类型的数据,因为会让数据体积增大,增加传输耗时。如果需要传递Buffer,有两种替代方案:
1. 若Buffer较大,可使用wx.cloud.CDN方法标记字段内容
2. 若Buffer非常小(如<10KB),可将Buffer转成base64再调用
调用示例
假设已有一个云函数add:
exports.add = (event, context, cb) => {
return event.x + event.y
}
// 云函数入口文件
exports.main = async (event, context) => {
return {
sum: event.a + event.b
}
}
小程序端调用云函数add:
wx.cloud.callFunction({
name: 'add',
data: {
a: 1,
b: 2
}
}).then(res => {
console.log(res.result.sum) // 3
})
wx.cloud.callFunction({
// 要调用的云函数名称
name: 'add',
// 传递给云函数的event参数
data: {
x: 1,
y: 2,
}
}).then(res => {
// output: res.result === 3
}).catch(err => {
// handle error
})
Promise风格调用
小程序端同时支持Promise风格调用,上面的回调风格调用可以用Promise风格改写:
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
const res = await cloud.callFunction({
// 要调用的云函数名称
name: 'add',
// 传递给云函数的参数
data: {
x: 1,
y: 2,
}
})
// 3
return res.result
}
___PROTECTED_BLOCK_2___版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;
工作时间:8:00-18:00
客服电话
0755-88186625
电子邮件
admin@lanyu.com
扫码二维码
获取最新动态