Как вызвать событие при изменении значения переменной в машинописи - nodejs - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть проект в машинописном тексте, который выполняет какую-то работу.

export class Job {
  public jobState: 'Active' | 'Completed' | 'Paused' | 'Cancelled';
  public jobId: string;
}

У меня есть объект карты, представляющий собой список активных работ,

private static jobStreams: Map<string, Job> = new Map();

В моем коде янеобходимо информировать об изменении состояния задания, например, когда пользователь выбирает «Приостановить» задание,

для соответствующего состояния объекта карты устанавливается значение «Приостановлено», например:

jobStreams.set(job.jobId).jobState = 'Paused';

Я хочу знать, как вызвать событие при изменении состояния задания?

Я буду выполнять некоторые действия в задании, и когда задание будет приостановлено, я смогу получить событиеэто намекает мне на изменение состояния задания, так что я могу остановить всю обработку.

Есть ли какой-нибудь механизм обработки событий, доступный в Typescript и nodejs, который я могу использовать для моего варианта использования?

Сейчас я использую механизм опроса, использующий setTimeout для проверки изменения состояния задания, что не идеально.

1 Ответ

2 голосов
/ 26 апреля 2019

Вы можете инициировать событие вручную, расширяя EventEmitter и генерируя событие всякий раз, когда вы устанавливаете значение:

setJob(job) {
  jobStreams.set(job.jobId).jobState = 'Paused';
  this.emit('job-paused', job);
}

Или используйте систему реактивности, такую ​​как MobX , для наблюдения за изменением состояния и реактивности.

Хотя система реактивности проще на практике, вам нужно будет опубликовать изменение состояния и подписаться на него на разных серверах (что если у вас более одного экземпляра).

Обычно это делается через посредник сообщений (например, Kafka) или систему pub-sub, например Redis pub-sub .

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