首页 > 解决方案 > 使用 JSON API 响应时 Sequelize 事务失败

问题描述

我正在使用 Sequelize 事务来确保每个查询都使用最新数据。我正在使用 Express 返回 SQL 响应。

编辑:(我使用了更好的基准测试工具,我不认为我的旧问题是解决实际问题)。我对事务的理解是 Sequelize 一次运行一个事务,而不是并行运行多个事务。这里不是这样吗?如果是这样,我是否需要使用一些锁定机制?

const test_create_transaction = async (serviceID, res) => {
  try {
    return sequelize.transaction(async (t) => {
      let serviceRoom;
      // Find a service room with less than a certain number of customers
      serviceRoom = await ServiceRooms.findOne({
        where: {
          serviceID,
          numberCustomers: {
            [Op.lt]: MAX_CUSTOMERS_PER_ROOM,
          },
        },
        transaction: t,
      });
      // If no such room exists, create a new room
      if (!serviceRoom) {
        serviceRoom = await ServiceRooms.create(
          {
            serviceID,
          },
          { transaction: t }
        );
      }
      const testUserUID = "testUID" + Date.now().toString();
      const { serviceRoomUID } = serviceRoom;
      // Add the customer to that room
      await ServiceRoomEnrollments.create(
        {
          serviceRoomUID: serviceRoomUID,
          userUID: testUserUID,
          serviceID: serviceID,
        },
        { transaction: t }
      );
      // Increment the number of customers in that room
      await ServiceRooms.increment("numberCustomers", {
        by: 1,
        transaction: t,
        where: {
          serviceRoomUID: serviceRoomUID,
        },
      });
      // PROBLEM: For some reason, the very first findOne query does not use 
      // the up to date number of customers.
      return res.send(“test”);
    });
  } catch (error) {
    console.log("error: ", error.message);
    res.end();
  }
};

标签: mysqlnode.jsexpresssequelize.js

解决方案


推荐阅读