云开发for循环中查询数据库异步执行的问题怎么解决
发布于 6 年前 作者 tdai 10346 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)
// 云函数入口文件
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 回复

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

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

可以使用 await 或 Promise.all。

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

回到顶部