首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能返回角度7的可观测值?

我怎样才能返回角度7的可观测值?
EN

Stack Overflow用户
提问于 2018-11-20 01:38:02
回答 3查看 7.5K关注 0票数 1

我以前有一个关于角5.x的项目,我把它更新为7。有一个特殊的例子,我需要返回一个可以观察到的httpClient,但是我不知道它在角7中是如何变化的。它给了我一个关于callApi函数的“捕获”的错误。ts属性'catch‘在类型’可观察‘上不存在。2339是我的错误

代码语言:javascript
复制
callApi(url: string): Observable<any> {

    return this.httpClient
        .get(url)
        .catch(this.handleError);
}

这是我的config.service.ts文件中的所有代码。

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/throw';

import { environment } from './../environments/environment';

@Injectable()
export class ConfigService {

    private configUrl = environment.production ? './assets/config/config.prod.json' : './assets/config/config.dev.json';

    private _config: any;

    constructor(private httpClient: HttpClient) {
    }

    load(): Promise<any> {

        let promise: Promise<any> = new Promise((resolve: any) => {

            this.callApi(this.configUrl)
                .subscribe(config => {
                    this._config = config;
                    resolve(true)
                });
        });
        return promise;
    }

    getConfig(key: any) {
        return this._config[key];
    }

    private handleError(error: Response | any) {
        let errMsg: string;
        if (error instanceof Response) {
            let body = {}
            try {
                body = error.json();
            } catch (e) {
            }
            const err = body['error'] || JSON.stringify(body);
            errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
        } else {
            errMsg = error.message ? error.message : error.toString();
        }

        console.error(errMsg);

        return Observable.throw(errMsg);
    }

    callApi(url: string): Observable<any> {

        return this.httpClient
            .get(url)
            .catch(this.handleError);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-20 01:50:14

rxjs库更新为更高版本,并更改以下代码--您需要使用可能解决catchError()问题的rxjs中的pipe运算符--将catch更改为catchError

试试像这样的东西

代码语言:javascript
复制
callApi(url: string): Observable<any> {

    return this.httpClient
        .get(url).pipe(catchError(this.handleError));
}

希望这有帮助-快乐编码:)

票数 4
EN

Stack Overflow用户

发布于 2018-11-20 01:46:00

角6从RxJs 5转到RxJs 6,并且有一些破碎的变化。

catch已重命名为catchError

https://www.academind.com/learn/javascript/rxjs-6-what-changed/

当您从RxJs 5升级到6时,您可以安装一个兼容性库,但最好修改代码,使其与RxJ6兼容。

票数 2
EN

Stack Overflow用户

发布于 2018-11-20 01:53:53

除了使用catchError而不是catch之外,因为HttpClient返回一个可观测的,因此考虑到对一个可观测对象的订阅有3个回调参数,这些参数对应于成功事件、错误事件以及连接完成时的一个完成事件(实际上,您可以在大多数情况下忽略这个事件)。所以,您的代码可能如下所示:

config.service.ts

代码语言:javascript
复制
callApi(url: string): Observable<any> {
    return this.httpClient
        .get(url)
        .pipe(catchError(this.handleError)); // adjust handleError function, as necessary
}

some.component.ts

代码语言:javascript
复制
this.configService.callApi('https://google.com')
  .subscribe(
    goodResult => console.log(goodResult),
    error => console.log(error),
    () => console.log('the api call is done!')
  )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53385034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档