У меня есть метод обработки наших ошибок из HTTP-запросов, и он выглядит так
public handleError(err: any, caught: Observable<any>): Observable<any> {
//irrelevant code removed
this.logger.debug(err);//example of problem
return caught;
}
Он вызывается так (пример метода, но показывает ошибку)
public makeHttpCall() {
this.http.get("http://api.exmaple.com/getsomedata")
.map(r=> r.json())
.catch(this.handleError);
}
Проблема с приведенным выше кодом заключается в том, что при вызове this.logger.debug(err)
в handleError
методе this
больше не обращается к классу, из которого был сделан вызов http, а ссылается на CatchSubscriber.
Поэтому я меняю .catch(this.handleError);
на .catch(this.handlError.bind(this))
;
Это работает, теперь, когда я вызываю this.logger.debug
this
, относится к правильному объекту. Проблема в том, что http-запрос вызывается снова и снова, см. Здесь:
Это происходит только после применения .bind(this)
Я не могу понять, почему это происходит
*********РЕДАКТИРОВАТЬ*********
Изменение с .catch(handleError)
на .catch((a,b)=>handleError(a,b))
исправляет ссылку на this
, но HTTP-запрос снова и снова рассылается спамом, но только в случае сбоя запроса. Если запрос выполнен успешно, это происходит только один раз.