Из того, что я могу понять из этого ТАКОГО сообщения , нет необходимости отписываться после того, как наблюдаемое выдает ошибку или завершает .
То, что я считаю неправильным в вашем коде, заключается в том, что вы подписываетесь на этот запрос в обработчике первой подписки *1012*, поэтому вы не сможете увидеть ошибку в второй обратный вызов .
Это похоже на что-то вроде этого:
interval(1000)
.subscribe(
() => {},
() => { console.log('I will never be able to catch an error just from an observable that emits values at certain interval!') }
)
Один из способов решить эту проблему - поместить вызов API в конвейерный оператор , такой как switchMap
, mergeMap
, exhaustMap
, concatMap
, в зависимости от вашего случая использования.
(Вышеупомянутые операторы также называются операторами высокого порядка ).
this.polling = interval(1000)
.pipe(
mergeMap(() => this.resourceService.getQueryUserPresence(this.contacts[0].Email))
)
.subscribe(
response => console.log('polling operation successful!', response),
err => console.log('error caught from the API call!', err)
)
РЕДАКТИРОВАТЬ
начать опрос, но входить в вызов webAPI можно, только если this.contacts.length> 0
Я думаю, вы можете использовать оператор skipWhile
.
this.polling = interval(1000)
.pipe(
skipWhile(() => this.contacts.length === 0),
mergeMap(() => this.resourceService.getQueryUserPresence(this.contacts[0].Email))
)
.subscribe(
response => console.log('polling operation successful!', response),
err => console.log('error caught from the API call!', err)
)