Задержка внутри / после подписки в угловых - PullRequest
0 голосов
/ 03 октября 2019

Я устанавливаю isUpdate флаг true в подписке, и я должен установить его обратно в false после некоторой задержки, чтобы я мог показать быстрое всплывающее окно

Я пытался использовать .pipe(delay(2000)).subscribe Однако весьобратный вызов задерживается

this.sp.myservice(data).subscribe(
data => {
this.isUpdate = true;
//something like this but not setTimeout
setTimeout(() => 
{
this.isUpdate = false
}, 2000) 
}
);

Ожидаемый результат: isUpdated должен быть ложным через некоторое время

1 Ответ

1 голос
/ 03 октября 2019

Есть лучшие способы отображения всплывающих окон.

Но, чтобы ответить вам, чистый способ может быть:

this.sp.myservice(data).pipe(
  tap(() => this.isUpdate = true),
  delay(5000),
).subscribe(() => this.isUpdate = false);

Режим реального времени:

rxjs.of('some mock value').pipe(
  rxjs.operators.tap(() => console.log('Wait 5 seconds')),
  rxjs.operators.delay(5000),
).subscribe(() => console.log('See ? I am delayed.'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.js"></script>

Редактировать

по вашему запросу:

this.sp.myservice(data).pipe(
  tap(data => this.isUpdate = this.data && this.data.status && this.data.status.code === 0),
  delay(5000),
  catchError(err => throwError(err))
).subscribe(
  () => this.isUpdate = false,
  err => console.log('an error occured')
);

Режим реального времени:

rxjs.throwError('some error mock value').pipe(
  rxjs.operators.tap(() => console.log('Wait 5 seconds')),
  rxjs.operators.delay(5000),
  rxjs.operators.catchError(err => rxjs.throwError(err))
).subscribe(
  () => console.log('See ? I am delayed.'),
  err => console.log('an error occured')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.js"></script>
...