Каков тип возврата Http.get().catch?

В настоящее время я изучаю angular 2, посещая класс Pluralsight Деборы Кураты (Angular 2: Начало работы). Пока это здорово, но я не могу понять, каким должен быть возвращаемый тип моего .catch. В ее курсе и во всех примерах, которые я нашел до сих пор, тип возвращаемого значения остается пустым.

Вот что у меня есть:

getProducts(): Observable<IProduct[]> {
    return this._http.get("someurl")
        .map {.....}
        .catch(this.handleError);
}

handleError (response: Response) **/*what goes here?*/** {
    // the code in the course says Observable.throw, but chrome is
    // complaining that there is no such function. I have tracked 
    // down "static throw: typeof ErrorObservable.create;" in 
    // Observable.ts but I'm not sure what's going on here.
}

person emery.noel    schedule 23.03.2017    source источник


Ответы (1)


Наиболее распространенным типом возвращаемого значения является Observable.

Чтобы быть точным, функция селектора для оператора catch() определяется как:

(err: any, caught: Observable): ObservableInput

Возвращенный Observable подписывается с использованием subscribeToResult, который поддерживает несколько типов возврата (поэтому есть ObservableInput, а не только Observable). В любом случае, проще взглянуть на примеры в исходном коде, которых еще нет в онлайн-документации, где вы сможете понять, как это работает: https://github.com/ReactiveX/rxjs/blob/master/src/operator/catch.ts#L8

Или посмотрите, что поддерживает subscribeToResult: https://github.com/ReactiveX/rxjs/blob/master/src/util/subscribeToResult.ts#L17

person martin    schedule 23.03.2017
comment
Спасибо @martin. К сожалению, исходный код мало что проясняет (для меня). Но я вижу функцию экспорта строки _catch‹T, R›(this: Observable‹T›, selector: (err: any, catch: Observable‹T›) =› ObservableInput‹R›): Observable‹R› {.. .}. Итак, _catch (не catch) — это функция, которая принимает это (как это работает в TS?) и функцию-селектор. Функция селектора возвращает ObservableInput‹R›, а сама _catch возвращает Observable‹R›. Какой из них, в частности, возвращает .catch? (Я также пытался вернуть Observable, но, конечно, он жаловался на отсутствие универсального типа.) - person emery.noel; 25.03.2017
comment
@emery.noel Можете ли вы показать точный код, который выдает ошибки ввода? - person martin; 27.03.2017