小编jal*_*jal的帖子

rxjs 只在第一次执行 tap

我只想在获得第一个发出的值时执行 tap()

就像是:

Observable
  .pipe(
     tap(() => { /* execute only when I get the first emitted value */ })
  )
  .subscribe(() => {
     // .....
  })
Run Code Online (Sandbox Code Playgroud)

javascript rxjs

13
推荐指数
3
解决办法
1万
查看次数

争用条件在多个表上进行顺序查询

问题:

我正在研究一个包含多个研究和一组用户的项目,每个用户都参与其中的一项研究。每个研究都根据使用某种随机算法生成的列表将参与者分为两组。注册后,将为每个用户分配一个研究,他们的组由注册顺序和组列表中的相应索引确定。例如,如果研究的A总席位为4,而组列表是[0, 1, 1, 0]将第一个用户分配给group 0,则将第二个用户分配给,1依此类推,直到研究完成。

在项目中定义了其他用户角色,即管理员,可以将其分配给多个研究,而无需占据研究的位置。这意味着用户与学习的关系是n:m

将用户分配给研究和研究组时,当前实施中出现的问题是竞争状况。该代码下面提供和它的工作方式是,它覆盖addUserStudy模式,只要用户添加到它会检查有多少用户已经在研究中学习,并为用户组列表这是当前指数seatsTaken数。只要将用户定期添加到研究中,此方法就起作用。但是,无论何时同时添加多个用户,异步查询都会导致争用情况,并且该seatsTaken计数会受到其他用户同时注册的影响。

在下面的示例中,分配给A间隔学习的用户分配了正确的组,但B同时查询的学习具有不正确的组分配。

const Sequelize = require('sequelize');
const assert = require('assert');

const sequelize = new Sequelize({
  database: 'database',
  username: 'username',
  password: 'password',
  dialect: process.env.DB_DIALECT || 'sqlite',
  storage: 'db.sqlite',
  logging: false
});

const User = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true,
  },
  group: {
    type: Sequelize.INTEGER,
    allowNull: true, …
Run Code Online (Sandbox Code Playgroud)

mysql sqlite node.js sequelize.js

5
推荐指数
1
解决办法
337
查看次数

标签 统计

javascript ×1

mysql ×1

node.js ×1

rxjs ×1

sequelize.js ×1

sqlite ×1