前言

小程序云开发提供了云函数,云函数是运行在服务端的代码,执行速度快。通常一些复杂的功能逻辑或读取云数据库都可使用云函数实现,高效安全。而云函数之间也是可以相互调用的,这样可以使得功能逻辑模块化,提高可读性。


一、案例说明

场景:在一个集合中,不定时增加新的记录,每个集合都有一个createTime字段,以毫秒存储记录创建时的时间。当集合中的记录离当前时间过了很久后,希望这条记录被删除,以确保记录都是最新的。

分析:查询记录的条件是时间差(假设120秒),而云开发数据库操作提供的查询指令并不支持运算,因此需要把记录先读取出来再做判断。

解决:创建两个云函数,一个负责读取所有记录,另一个负责调用前一个云函数获取所有记录,然后再处理。

二、功能实现

1.云函数1:getdata

注意:云函数只能最多一次读取集合中 100 条的记录,这里假设记录不足100条,可以一次性读取完。

代码如下(示例):

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const db = cloud.database()
  try {
    return await db.collection('testTrigger').get() //testTrigger是集合名
  } catch (e) {
    console.error(e)
  }
}

2.云函数2:deldata

代码如下(示例):

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const db = cloud.database()
  const t = new Date(); //获取当前时间
  const res = await cloud.callFunction({ //调用云函数getdate
    // 要调用的云函数名称
    name: 'getdata',
    // 传递给云函数的参数
    data: {
      }
  })
  const arr=res.result.data; //把所有记录给arr
  try{
    for (let i = 0; i < arr.length;i++){
      if (t.getTime() - arr[i].createTime > 120000) { // 计算差值,删除的条件
        await db.collection('testTrigger').doc(arr[i]._id).remove()
      }
    }
    return arr.length;
  } catch (e) {
    console.error(e)
  }

}

两个云函数处理各自的逻辑,最终实现删除旧的记录


总结

在云函数中调用云函数与在小程序端类似,不过因为云函数运行在服务端,不需要加 wx. 前缀。我们一开始调用时,习惯性复制粘贴,因此比较容易出现这个问题,使得云函数无法运行。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐