В настоящее время я занимаюсь разработкой службы с использованием 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 раз, то возникает тупик.
Чтобы избежать тупика, я скрывал кнопку, если она была нажата.
Однако есть ли другой способ избежать тупиковой ситуации на стороне сервера, когда ответ на запрос происходит несколько раз?