大佬们,怎么样才能在云函数里面实现两个异步的操作
简单的说,我首先从数据库中取到数据,然后筛选出数据,找到符合条件的数据后,逐个更新
云函数的代码如下
// 云函数入口文件 const cloud = require( 'wx-server-sdk' ) cloud.init() // 云函数入口函数 exports.main = async(event, context) => { const db = cloud.database() const commend = db.command try { const seats_list = await db.collection( 'seats' ).where({ used: true }) .get() for ( var seats_index in seats_list) { await db.collection( 'seats' ).doc(seats_list[seats_index].data._id).update({ data: { used: commend.set( false ), } }) } } catch (e) { console.log(e) } return } |
大概意思就是从集合seat里面查找used为true的部分,await等到取完后,逐个更新并await所有的used变为false
但是上述代码并不能用,求大佬告诉我await的真正用法
(PS:不要问我为啥不直接where().update(),因为我原先的操作是要从数据库中所有used=true的内容中取出一个日期,然后跟本地的日期进行比较,最后更新,这个操作不能直接用where)
代码并不能用的出错信息呢?
建议你在业务层 做这个操作, 保证 每个云函数的功能 独立性
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database();
const commend = db.command;
// 云函数入口函数
exports.main = async(event, context) => {
if (event.searchList) {
try {
return await db.collection('seats').where({
used:true
})
.get(success: (res) => {
return res
});
} catch (e) {
console.error('========searchList error=======', e);
}
} else if (event.updateWithIds) {
try {
return await db.collection('seats')..where({
id: _.in(event.ids) // 从业务层将要更新的 数据 ID 或者唯一标识字段以数组的方式传过来
}).update({
data: {
used: commend.set(false),
}
})
} catch (e) {
console.error('========updateWithIds error=======', e);
}
}
}
------------------业务层面-------------------
searchList: function() {
wx.cloud.callFunction({
name: '你这个函数对外暴露的名称',
data: {
searchList: true,
},
success: res => {
},
fail: err => {
}
})
}
update: function(ids) {
wx.cloud.callFunction({
name: '你这个函数对外暴露的名称',
data: {
updateWithIds: true,
ids: ids || []
},
success: res => {
},
fail: err => {
}
})
}