为什么我遇到此错误。 我正在尝试映射从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中,我们现在面临许多问题。
答案 0 :(得分:4)
您需要使用map
和do
( 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)
);
}