// 云函数入口文件 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方法去做其他异步操作也是正常的,唯独在云函数里访问数据库会异常。到底是为什么?
我也遇到了类似的情况,以下是解决办法。
问题应该是出在
cloud.init()
这一行,初始化不完整。建议改成以下:cloud.init({
traceUser: true,
env: 'xxxxx' //这里是你自己设置的云开发环境的名称
})
希望对你有所帮助。
6666,大兄弟,多谢了,之前只在app.js中完整设置了这个,这个地方确实也需要完整初始化一下!
我也遇到这个问题,但加了traceUser: true,也不行,请问如何解决?
关键是env那一行,要把你自己的云环境名称加进去。
加了env一行的。本来是正常读取的,但用了异步变同步处理就读不出数据了,急死!
你的具体情况我不了解,实在无法解答。只能告诉你一些原则性的东西。主要是明确代码各个部分的环境参数一致,且根据你要实现的目的选择了合适的方法。
不通过async-await的方式,直接去访问,是指的怎样的写法呢
我也遇到了,确实需要在云函数的 cloud.init() 中,加 env: 'xxx' 初始化。
不过为啥要这样呢?
当前环境已经切换了呀