#rxjs
Вопрос:
Я подписываюсь на Наблюдаемое следующим образом:
this.service.post(request).subscribe(
(value: Response> => {
// Do something with value
},
(error) => {
this.state = State.Invalid;
// Show errors on page
},
() => {
this.state = State.Completed;
// Redirect to new page:
this.router.navigate(['done'], { state: { v: value } });
}
);
В основном я отправляю запрос в API, а затем мне нужно:
- Сделайте что-нибудь с возвращенным значением;
- Показывать ошибки при наличии ошибки
- Перенаправление на новую страницу после обработки возвращенного значения.
Как получить доступ к значению в завершено? Вот почему мне нужно получить к нему доступ:
this.router.navigate(['done'], { state: { v: value } });
Должен ли я переместить эту строку в next
функцию?
(value: Response> => {
// Do something with value
// Redirect here
}
Комментарии:
1. Когда вы подписываетесь на observable, вы получаете поток нулевых или более значений с помощью обратного вызова «следующий». Полный обратный вызов наблюдаемого объекта не имеет значения. К какой ценности вы пытаетесь получить доступ?
2. Я сделал свой вопрос более ясным с обновлением … Помогает ли это?
3. Да, вы можете переместить его в
next
обратный вызов, который будет вызван только в том случае, если ошибки нет.
Ответ №1:
Вы не можете сделать это complete
непосредственно в обратном вызове, потому что для этого требуется ноль аргументов.
Если вы хотите получить доступ к значению как после УСПЕШНОГО, так и после ОШИБКИ, вы можете использовать RxJS
операторы, такие как:
this.service
.post(request)
.pipe(
tap((value: Response) => {
// do something with the Response value here
}),
catchError((err) => {
// catch the error here, and return observable of anything that refer to an error not to the Response value.
return of('ANYTHING_REFER_TO_ERROR');
})
)
.subscribe((value: Response | string) => {
// Here you can access the value,
// which will be the Response value if there is no error,
// or the value your returned from catchError.
});
Комментарии:
1. завершение вызывается после того, как наблюдаемое состояние выполнено УСПЕШНО или ОШИБОЧНО? Я думал, что это будет только после СЛЕДУЮЩЕГО
2. Извини, я виноват. Я обновил свой ответ, чтобы включить решение, использующее
RxJS
только операторов. Спасибо.