- 需求的场景描述(希望解决的问题)
// 云函数入口文件 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 } |
- 希望提供的能力
有没有什么解决办法??
可以使用 await 或 Promise.all。
用await一直报错,能不能给个Demo
您是怎么用的呢,贴一下代码看看。
我用了递归调用+async函数+await终于出来了
还是不行,不稳定
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
}
因为云开发内存最大提供256M,运行时间长就会报超时,可以修改超时时间,最大值是20秒。如果超过20秒你的云函数还不能运行完毕就会报错。
建议做法:第1步、新建一个数据库集合,把这个集合作为累加器。第2步、在你的代码中where的取值范围为你集合累加器的取值范围,代码最后还要增值累加器数据。第3步、使用定时触发器触发你的代码。
如果cardList不是特别大的话,可以用在使用逻辑查询https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-client-api/database/command.or.html如果cardList很大,在查询语句前加个await试试
加await一直报错