Подпишитесь на BehaviorSubject, пока значение не является неопределенным - PullRequest
0 голосов
/ 18 июня 2019

У меня есть служба со значением BehaviorSubject.Я получаю доступ к этому значению из моего сервиса на странице TS.Я использую эту часть кода:

В основном, если SubjectVariable не является неопределенной, я добавляю это значение в мою локальную переменную SubjectVariableNew.Я хочу зациклить это, пока SubjectVariable! == не определено в течение тайм-аута 3 секунды.Если в этот промежуток времени он не определен, я выскажу текстовое сообщение.Так что в основном я хочу иметь 3-секундное временное окно / загрузку и проверить, если SubjectVariable! == undefined.

this.myService.mySubjectVariable.subscribe((SubjectVariable: 
string) => {     
            if (SubjectVariable !== undefined) {
                this.SubjectVariableNew = SubjectVariable;
                this.valueIsReturned = true;
            } else {
                this.valueIsReturned = false;
            }

});

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Вы можете использовать retryWhen, чтобы повторить попытку с задержкой.Вот пример:

const sub = new rxjs.BehaviorSubject(undefined);

setTimeout(() => sub.next('Hey'), 1500);

sub.pipe(
  rxjs.operators.map(value => {
    if (value) return value;
    throw 'Error: value is undefined';
  }),
  rxjs.operators.retryWhen(errors => errors.pipe(
    rxjs.operators.tap(error => console.log('retrying for error = ', error)),
    rxjs.operators.delay(1000),
    rxjs.operators.take(2),
  ))
).subscribe(
  value => console.log('value has been set'),
  error => console.log('value has been kept to undefined'),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>
1 голос
/ 18 июня 2019

Используйте тайм-аут и фильтр операторы:

    const subject = new BehaviorSubject(null);
    subject
      .pipe(
        filter(data => data !== null)
      )
     .pipe(
        timeout(3000),
        catchError(error => of(`Request timed out!`))
      )
      .subscribe(
        () => console.log("Data is not null")
      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...