Я хотел бы иметь службу для вызова API, который правильно обрабатывает запрос и выполняет стандартную обработку ошибок в запросах API. Например, у меня есть ApiErrorsService
, который я хочу вызвать, когда при любом вызове API возникает ошибка. Я также хочу отправлять вызовы стандартным способом, то есть устанавливая Content-Type на application / json и сериализуя объект запроса.
Конечно, когда я подписываюсь на наблюдаемый объект, возвращаемый из Http
, он вызывается один раз, а когда я возвращаю его, и вызывающий абонент подписывается, он вызывается снова. Как лучше всего отслеживать результаты в двух местах, не выполняя дважды вызов API? Могу я просто позвонить .publish()
или .share()
и ответить? Надо ли потом утилизировать? Могут ли возникнуть какие-либо проблемы с синхронизацией? Если я имитирую вызов API и немедленно верну значение, все будет нормально, или в подписке вызывающего абонента значения не будут? Вот код, который у меня есть:
post(path: string, data: any): Observable<Response> {
var headers: Headers = new Headers();
headers.set("Content-Type", "application/json");
var s = data == null ? null : JSON.stringify(data, null, 2);
var shared = this.http.post(path, s, { headers: headers }).share();
shared.subscribe(null, err => this.appErrorsService.addApiError(err));
return shared;
}