云函数本地调用与云函数间调用
根据上一篇讲到的云函数使用,讲到了云函数的基本使用方式,并给出了使用的示例。现在我们来讲一下常用的云函数调用。
云函数基本调用方法
根据官网给出的本地调用云函数的基本示例,本地调用云函数采用wx.cloud.callFunction
API,通过wx.cloud.callFunction
获取的结果是一个Promise对象,因此官方给出了两种获取云函数处理结果的方式:回调函数和then调用方式。如下所示:
/*
* 回调函数方式
*/
wx.cloud.callFunction({
// 云函数名称
name: 'add',
// 传给云函数的参数
data: {
a: 1,
b: 2,
},
success: function(res) {
console.log(res.result.sum) // 3
},
fail: console.error
})
根据回调函数的方式调用方法可知,这是最基本的调用方式,回调函数是异步进行的,不能在外部获取到云函数处理结果。同理采用Promise.then的方式也会存在类似的结果.
/*
* Promise 风格的调用
*/
wx.cloud.callFunction({
// 云函数名称
name: 'add',
// 传给云函数的参数
data: {
a: 1,
b: 2,
},
})
.then(res => {
console.log(res.result.sum) // 3
})
.catch(console.error)
改进的云函数调用方法
众所周知,wx.cloud.callFunction
调用得到一个Promise 对象,想要在外部得到返回结果,可以采用await
的方式,如下所示:
let res = await wx.cloud.callFunction({
name: 'add',
data: {
a: 1,
b: 2,
},
});
console.log(res.result.sum); // 3
通过await方式调用云函数直接获取返回结果,从而解决了想要在外部拿到调用结果的问题。
但是此时会有一个问题,多次调用云函数,若其中某一次调用出错后续的云调用将无法执行,因此需要对每一次云函数调用包裹try … catch ,如下所示:
try {
let res = await wx.cloud.callFunction({
name: 'add',
data: {
a: 1,
b: 2
},
});
return res && res.result;
} catch (e) {
console.log(e);
}
try {
let res = await wx.cloud.callFunction({
name: 'minus',
data: {
a: 10,
b: 2
},
});
return res && res.result;
} catch (e) {
console.log(e);
}
云函数之间的调用方法
介绍了本地调用云函数的方式,但其实云函数可以调用云开发提供的存储、数据库和云函数
云函数间调用为实现类似于本地函数间调用模式开辟了路径。为函数间功能的解耦提供方式。
云函数属于管理端,在云函数中运行的代码拥有不受限的数据库读写权限和云文件读写权限。
云函数使用 wx-server-sdk
调用其他API,同小程序端一样,也需要执行一次初始化方法:
const cloud = require('wx-server-sdk')
// 给定 DYNAMIC_CURRENT_ENV 常量:接下来的 API 调用都将请求到与该云函数当前所在环境相同的环境
// 请安装 wx-server-sdk v1.1.0 或以上以使用该常量
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
因此云函数间调用的方式,如下所示:
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
let sum;
try {
let res = await cloud.callFunction({
name: 'add',
data: {
a: event.a,
b: event.b,
}
})
sum = res.result.sum;
} catch (e) {
console.log(e)
|
let minus = sum - event.c;
return minus;
}
本地调用与云函数调用的比较
我们可以将云开发环境看作是一个服务器,本地调用云函数需要建立连接。连接需要一定的耗时,因此可以推断本地调用云函数比云函数中调用云函数更耗时。
验证
1、本地调用云函数耗时,如图:
2、云函数调用耗时,如图:
根据上述的验证,可以知道本地调用云函数更耗时,因此想要让程序性能更好,尽可能减少本地调用云函数的次数。提供了一种思路:只暴露一个云函数接口,一次性将所有的处理结果返回给本地,其余的云函数处理都在云函数上进行。
-------- The END -------