收藏
回答

云函数在本地调试可以获取到数据库数据,但是上传之后获取数据为空

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 Bug 工具 wx6ad765d351061e65 修改 复制 2.7.2

- 当前 Bug 的表现(可附上截图)


- 预期表现


- 复现路径


- 提供一个最简复现 Demo


const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
  // 先取出集合记录总数
  const countResult = await db.collection('company').where(event).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('company').where(event).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,
    }
  })
}


回答关注问题邀请回答
收藏

2 个回答

  • 邓坤力
    邓坤力
    2019-07-01

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce


    reduce 缺少了第二个参数

    2019-07-01
    有用
    回复 1
    • Lostexile
      Lostexile
      2019-07-02

      const promise = db.collection('company').where(event).skip(i*MAX_LIMIT).limit(MAX_LIMIT).get()


      您好,是这样的,我调试的时候发现上面这个查询语句,在本地调试的时候可以获得数据库里的数据,后续的return是可以正常运行的,但是上传之后,这里返回的数据为[],导致了后面的return部分报错,我想请教的是这个的问题。


      2019-07-02
      回复
  • ulysses
    ulysses
    2019-07-01

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce


    reduce()  缺少初始值,也就是第二个参数


    类似于这样:


    return (await Promise.all(tasks)).reduce((acc, cur) => {
      return {
        data: acc.data.concat(cur.data),
        errMsg: acc.errMsg,
      }
    }, {data: [], errMsg: ''})



    2019-07-01
    有用
    回复 6
    • Lostexile
      Lostexile
      2019-07-01
      const promise = db.collection('company').where(event).skip(i*MAX_LIMIT).limit(MAX_LIMIT).get()


      您好,是这样的,我调试的时候发现上面这个查询语句,在本地调试的时候可以获得数据库里的数据,后续的return是可以正常运行的,但是上传之后,这里返回的数据为[],导致了后面的return部分报错,我想请教的是这个的问题。

      2019-07-01
      回复
    • ulysses
      ulysses
      2019-07-01回复Lostexile

      哦,原来理解成后边的问题了。建议先试着打印 本地和远程的查询条件是否一致,如果一致的话,返回数据是否相同。如果还未解决可以继续回复。我这边也继续看一下可能有什么问题。

      2019-07-01
      回复
    • Lostexile
      Lostexile
      2019-07-01回复ulysses

      查询条件是通过event参数传过去的,本地调试的时候也是用的模拟器点击触发,都可以正常执行,但是上传之后就为空了。查询条件很简单,我定义了商户的分类,这里传值的内容就是{"type":0}。

      2019-07-01
      回复
    • Lostexile
      Lostexile
      2019-07-02

      请问我应该如何修改呢?

      2019-07-02
      回复
    • Lostexile
      Lostexile
      2019-07-02

      请问这个问题还在关注吗?

      2019-07-02
      回复
    查看更多(1)
登录 后发表内容