云函数中通过async-await的方式无法访问数据库
发布于 6 年前 作者 bmo 19354 次浏览 来自 问答
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
 
const db = cloud.database()
const MAX_LIMIT = 100
 
// 云函数入口函数
exports.main = async (event, context) => {
  // 查询当前用户所有的 page-list 总数
  const countResult = await db.collection('page-list').count()
  const total = countResult.total
  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection('page-list').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })
}

这段代码通过云函数查询数据库,但是每次都会报这个错,找不到‘page-list’这个表

[云函数] [sum] 调用失败 Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail requestID 883d6524-f495-11e8-950a-5254005d5fdb, cloud function service error code -504002, error message Error: errCode: -502005 database collection not exists | errMsg: Collection `page-list` is not exists;

而这个表,不通过async-await的方式,直接去访问正常的,并且async-await方法去做其他异步操作也是正常的,唯独在云函数里访问数据库会异常。到底是为什么?

2 回复

我也遇到了类似的情况,以下是解决办法。

问题应该是出在cloud.init()这一行,初始化不完整。建议改成以下:

cloud.init({

 traceUser: true,

 env: ‘xxxxx’  //这里是你自己设置的云开发环境的名称

})

希望对你有所帮助。

不通过async-await的方式,直接去访问,是指的怎样的写法呢

回到顶部