收藏
回答

云开发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
}

- 希望提供的能力

有没有什么解决办法??

最后一次编辑于  2018-09-12  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

13 个回答

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

    可以使用 await 或 Promise.all。

    2018-09-12
    赞同 22
    回复 10
    • undefined
      undefined
      2018-09-12

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

      2018-09-12
      赞同
      回复
    • HS
      HS
      2018-09-12回复undefined

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

      2018-09-12
      赞同
      回复
    • undefined
      undefined
      2018-09-12回复HS

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

      2018-09-12
      赞同
      回复
    • undefined
      undefined
      2018-09-12回复undefined

      还是不行,不稳定

      2018-09-12
      赞同
      回复
    • undefined
      undefined
      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
      赞同
      回复
    查看更多(5)
  • 张吉(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
    • undefined
      undefined
      2018-09-12

      加await一直报错

      2018-09-12
      赞同
      回复