如何防止2个异步调用相互竞争?

时间:2019-12-27 06:12:26

标签: javascript node.js transactions sequelize.js

是否可以在不实际更新数据库的情况下将表锁定在序列表中?我有2个流程需要按一定顺序进行。一种将视频上传到s3,另一种将用户删除。虽然我知道可以在删除用户的同时锁定table.users行,但我想知道是否还有其他方法可以解决,甚至认为用户表并未真正被更改。基本上,如果用户正在上载内容,则需要table.users中的用户行不可编辑。

我从文档中得出的是:

async uploadImage(userId){
    await this._resize(640);

    await db.sequelize.transaction({
          isolationLevel: db.Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE
        },
          async t => {
            user = await db.user.findOne({
              where: { id: userId }
            }, {transaction: t});
            await this._upload();

          }).catch(err => {
            // do something with the err.
          });
    return this.uploadData;
  }

我的担心是,当我确实在日志输出中看到一个锁弹出时,我无法确定db是否在findOne期间处于锁定状态,然后在this._upload()运行时解锁,或者直到{{1} }被引用?

如果这不是正确的方法,那么有人可以指出我的方向

0 个答案:

没有答案