Как изменить код HttpClient после обновления приложения до Angular 7 - PullRequest
0 голосов
/ 30 января 2019

Я обновил Angular до версии 7 в своем приложении, и мне нужно немного изменить свой код после обновления, но я не уверен, как это сделать.

Это пример кода для изменения (впредыдущая версия Angular):

get(): Observable<MyResponseClass | null> {
    let url_ = some_url;

    let options_: any = {
        method: "get",
        headers: new Headers({
            "Content-Type": "application/json",
            "Accept": "application/json"
        })
    };

    return this.http.request(url_, options_).flatMap((response_: any) => {
        return this.getResponse(response_);
    }).catch((response_: any) => {
        if (response_ instanceof Response) {
            try {
                return this.getResponse(<any>response_);
            } catch (e) {
                return <Observable<MyResponseClass | null>><any>Observable.throw(e);
            }
        } else
            return <Observable<MyResponseClass | null>><any>Observable.throw(response_);
    });
}

Для этого вопроса не имеет значения, какие они getResponse и MyResponseClass, поэтому я пропущу объяснение этого.

ОКпоэтому первый шаг - это изменение .flatMap на .pipe () и map () из-за этого:

Свойство flatMap не существует для типа Observable .

Итак, после этого изменения мой код выглядит следующим образом:

return this.http.request(url_, options_).pipe(map((response_: any) => { 
            return this.getResponse(response_); })
        ).catch((response_: any) => {
            if (response_ instanceof Response) {
                try {
                    return this.getResponse(<any>response_);
                } catch (e) {
                    return <Observable<MyResponseClass | null>><any>Observable.throw(e);
                }
            } else
                return <Observable<MyResponseClass | null>><any>Observable.throw(response_);
        });

И теперь у меня появляется такая ошибка:

Свойство 'catch' не существуетпо типу 'Наблюдаемый'.

И здесь у меня проблема, потому что я действительно не знаю, что мне следует изменить.Я все еще ищу информацию в Google и переполнение стека, но пока безуспешно.Может быть, у меня недостаточно знаний об этом.

Ты поможешь мне с этим?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Aa за rxjs V6 Руководство по обновлению chaining operators has been replaced by piping также catch изменено на catchError, поэтому ваш окончательный код должен быть

  return this.http.request(url_, options_).pipe(map((response_: any) => { 
                return this.getResponse(response_); }),
              catchError((response_: any) => {
                if (response_ instanceof Response) {
                    try {
                        return this.getResponse(<any>response_);
                    } catch (e) {
                        return <Observable<MyResponseClass | null>><any>Observable.throw(e);
                    }
                } else
                    return <Observable<MyResponseClass | null>><any>Observable.throw(response_);
            })
            );

Или вы можете использовать rxjs-compact

0 голосов
/ 30 января 2019

Ваш RxJS, скорее всего, обновлен с v5.x до v6.x.Поэтому вам необходимо провести рефакторинг вашего кода, который включает RxJS.

Вот руководство по обновлению:

https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md

...