类型“ Observable <object>”上不存在属性“ map”

时间:2018-08-08 12:27:00

标签: angular typescript angular-services

为什么我遇到此错误。 我正在尝试映射从API Get Request 获得的响应。

这是我的API调用:

export let CONTEXTROOT="http://localhost:8080/core/api/";

这是我的getDashBoardData函数:

getDashBoardData(): Observable<string[]> {
     return this.http.get(CONTEXTROOT+'dashboard')
                     .map((res: Response) => res.json())
//                   .do(data => console.log('server data:', data))  // debug
                     .pipe(catchError(this.handleError));
}

这是我的错误函数,如果存在错误,则会调用该函数。

 private handleError (error: any) {
    // In a real world app, we might use a remote logging infrastructure
    // We'd also dig deeper into the error to get a better message
     let errMsg = (error.message) ? error.message :
                   error.status ? `${error.status} - ${error.statusText}` : 'Server error';
     console.error(errMsg); // log to console instead
     return Observable.throw(errMsg);
  }
}

这些功能在Angular 2中正常工作,但是在Angular 6中,我们现在面临许多问题。

3 个答案:

答案 0 :(得分:4)

您需要使用mapdo RxJS 5.5更高 do-> tap)运算符在pipe函数中。

如果您使用的是HttpClient,则也不需要使用.json()函数。

return this.http.get(CONTEXTROOT+'dashboard')
                .pipe(
                      map((res: Response) => res.json()), // senseless if you are using `HttpClient`
                      tap(data => console.log('server data:', data)),
                      catchError(this.handleError)
                );

答案 1 :(得分:1)

将其与pipe运算符一起移到do函数中。还要将do运算符重命名为tap,因为在新的rxjs版本中他们将其重命名了。

return this.http.get(CONTEXTROOT+'dashboard')  
                .pipe(
                   map((res: Response) => res.json()),
                   tap(data => console.log('server data:', data)),
                   catchError(this.handleError)
                 );

答案 2 :(得分:0)

在管道内尝试此地图

getDashBoardData(): Observable<string[]> {
    return this.http.get(CONTEXTROOT+'dashboard')    
        .pipe(
            .map((res: Response) => res.json()),
             catchError(this.handleError)
         );
}