收藏
回答

云函数中用Array.forEach(item,index)=>{...}对数据库操作?

测试数据

{
	"products": [{
		"status": "NEW",
		"total_price": 95.0,
		"count": 1.0,
		"is_vip_channel": true,
		"price": 95.0,
		"product_code": "PROD001"
	}, {
		"status": "NEW",
		"total_price": 48.0,
		"count": 4.0,
		"is_vip_channel": false,
		"price": 12.0,
		"product_code": "PROD002"
	}, {
		"status": "NEW",
		"total_price": 86.0,
		"count": 2.0,
		"is_vip_channel": true,
		"price": 43.0,
		"product_code": "PROD003"
	}],
	"userInfo": {
		"appId": "admin",
		"openId": "10007"
	}
}

需求:商品代码为 PROD001、PROD002的商品状态更新为DONE。

业务代码:

exports.main = async (event, context) => {
  const productCodes = ["PROD001","PROD002"]
  try{
    productCodes.forEach((item,index)=>{
      sysCart.where({
        "userInfo.openId": _.eq("10007"),
        products: _.elemMatch({product_code: item})
      }).update({
        data: {
          "products.$.status""DONE"
        }
      })
    })
    return "OK"
  }catch(e){
    return "NO"
  }
}

我的问题是这种在云函数中使用遍历对数据库操作的方式,是不是原子性的,需要保证两次调用要么都成功或者都失败,需不需要加事务。

或者针对这种需求,有没有更好的设计思路

回答关注问题邀请回答
收藏

1 个回答

  • 陈宇明
    陈宇明
    2020-11-16

    如果你要保证两次数据库操作成功,需要加事务。

    2020-11-16
    有用
    回复
登录 后发表内容
问题标签