操作:请求云函数,数据库先执行更新操作(让其中的字段amount-1),然后查询数据库,返回amount给客户端。
问题:更新和查询都是耗时操作,假如同一时间有100个请求同时进入,首先执行更新数据库操作,可能前20个请求执行更新完了,第一个请求才执行完更新和查询进行返回,这样第一个请求返回的数据就是amount减去20之后的值,而不是减一的,如何应对这种并发场景呢?
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
const {
id
} = event
//amount减一,更新数据库
await db.collection('account').doc(id).update({
amount: dbCmd.inc(-1)
})
//查询数据库
let res = await db.collection('account').doc(id).get()
res = res.result.data[0]
//返回数据给客户端
return {
code: 0,
msg:'请求成功',
amount: res.amount
}
};
5***@qq.com
JS是单线程是不是不存在这种并发计算的问题?
2023-03-08 09:27