Можно ли с течением времени назвать Эффектом? - PullRequest
0 голосов
/ 22 марта 2020

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

Что если я хочу отправить некоторые действия после даты, которую я держу в состоянии? Я забочусь о хорошей организации кода в проекте, поэтому для меня важно правильно назвать такую ​​функцию.

Может ли функция подписаться на ход времени и выполнять действия, если time === 0 можно назвать Effect?

mySelector
      .getTime(this.store)
      .pipe(skipWhile(time => time > 0))
      .subscribe(data => {
        // this.store.dispatch([...]);
      });

1 Ответ

0 голосов
/ 25 марта 2020

вы можете сохранить в эффектах, и это может помочь решить вашу проблему.

@Injectable()
export class AuthActivationSelfEffects {
    public readonly scheduler$: Observable<Action> = createEffect(() =>
        this.actions$.pipe(
            switchMap(() => this.store.select(getTime)),
            skipWhile(time => time > 0),
            switchMap(() => [
                action1,
                action2,
                action3,
            ]),
        ),
    );

    constructor(protected readonly store: Store) {}
}

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

это будет выглядеть так:

.pipe(
  ofType(startAction),
  delay(5000), // time to wait
  takeUntil(this.actions$.pipe(ofType(endAction))), // cancel
  switchMap(() => [action1, action2, action3]), // actions to dispatch if it wasn't canceled.
);
...