Node.js устраняет проблему взаимоблокировки - PullRequest
3 голосов
/ 08 ноября 2019

В настоящее время я занимаюсь разработкой службы с использованием nodejs, sequelize, mysql и reactjs.

Следующий код создает ответ для статьи.

module.exports.reply = async ({
  userId,
  postId,
  text
}) => {
  const t1 = await orm.transaction({
    isolationLevel: orm.Transaction.ISOLATION_LEVELS.SERIALIZABLE
  });

  try {
    let retData = { code: 0, data: {}};

    const reply = await replyModel.findOne({
      where: {
        userId: userId,
        postId: postId
      },
      lock: t1.LOCK.UPDATE,
      transaction: t1
    });

    if (reply == null) {
      await replyModel.create({
        postId: postId,
        text: text
      }, {transaction: t1});
    }

    retData.code = 200;

    await t1.commit();

    return retData;
  } catch (err) {
    await t1.rollback();

    throw err;
  }
}

Приведенный выше код является запросом POSTдля создания ответа на статью.

Если я непрерывно нажимал кнопку ответа 5 ~ 10 раз, то возникает тупик.

Чтобы избежать тупика, я скрывал кнопку, если она была нажата.

Однако есть ли другой способ избежать тупиковой ситуации на стороне сервера, когда ответ на запрос происходит несколько раз?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...