收藏
回答

云开发for循环中查询数据库异步执行的问题怎么解决

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 需求 客户端 wxff0ea0619bb852d2 2.2.5

- 需求的场景描述(希望解决的问题)

// 云函数入口文件
const cloud = require('wx-server-sdk')
 
cloud.init()
const db = cloud.database();
const db_goods = db.collection('goods')
// 云函数入口函数
exports.main = async(event, context) => {
  let cartList = event.cartList
  for (let i = 0; i < cartList.length; i++) {
    cartList[i].goods = db_goods.where({_id:cartList[i].goods_id}).get()
  }
  return cartList
}

- 希望提供的能力

有没有什么解决办法??

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

3 个回答

  • HS
    HS
    置顶回答2018-09-12

    可以使用 await 或 Promise.all。

    2018-09-12
    有用 2
    回复 12
    • 2018-09-12

      用await一直报错,能不能给个Demo

      2018-09-12
      回复
    • HS
      HS
      2018-09-12回复

      您是怎么用的呢,贴一下代码看看。

      2018-09-12
      回复
    • 2018-09-12回复HS

      我用了递归调用+async函数+await终于出来了

      2018-09-12
      回复
    • 2018-09-12回复

      还是不行,不稳定

      2018-09-12
      回复
    • 2018-09-12回复HS


      cloud.init()

      const db = cloud.database();

      const db_goods = db.collection('goods')

      // 云函数入口函数

      exports.main = async(event, context) => {

      var step = 0

      let cartList = event.cartList

      await cartList.forEach(async(item,index)=>{

      let goods = await db_goods.where({_id:item.goods_id}).get();

      item.goods = goods

      })

      return cartList

      }


      2018-09-12
      回复
    查看更多(7)
  • Limpie
    Limpie
    2019-12-12

    因为云开发内存最大提供256M,运行时间长就会报超时,可以修改超时时间,最大值是20秒。如果超过20秒你的云函数还不能运行完毕就会报错。

    建议做法:第1步、新建一个数据库集合,把这个集合作为累加器。第2步、在你的代码中where的取值范围为你集合累加器的取值范围,代码最后还要增值累加器数据。第3步、使用定时触发器触发你的代码。

    2019-12-12
    有用
    回复
  • 张吉(jimmyjzhang)
    张吉(jimmyjzhang)
    2018-09-12

    如果cardList不是特别大的话,可以用在使用逻辑查询https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-client-api/database/command.or.html如果cardList很大,在查询语句前加个await试试

    2018-09-12
    有用
    回复 1
    • 2018-09-12

      加await一直报错

      2018-09-12
      回复
登录 后发表内容