以下代码在Chrome控制台上返回: ERROR TypeError: t.json(...).map is not a function 这个 ng serve -prod 和 ng test --sm=false 运行良好。
ERROR TypeError: t.json(...).map is not a function
ng serve -prod
ng test --sm=false
.... export interface UsersData { _id: number; email: string; fullName: string; } export class RetrieveUsrData { private issuesUrl = 'http://localhost:4000/users'; getUserDetails(): Observable<UsersData[]> { return this.http.get(this.issuesUrl) .map(this.extractData) } extractData(result: Response): UsersData[] { console.log(JSON.stringify( result.json()) ); return result.json().map(usr => { return { _id: usr.message._id, email: usr.message.email, fullName: usr.message.fullName } }).subscribe(result => result = result); } constructor(private http: Http) {} } ...
我一直在检查一些问题,例如:。 mapping a HTTP response to a JSON and then mapping the JSON to a model ,并将我的代码/方法更改为:
extractData(result: Response): UsersData[] { return result.json().map(res => ({ _id:res.message._id, email:res.message.email, fullName:res.message.fullName }) as UsersData) .subscribe(result => result = result); ; }
但我一直在犯同样的错误。
这个 .map 方法在数组而不是对象上可用。
.map
导致错误的最可能原因是,如果您有这样的响应:
{ someKey: [1, 2, 3, 4] }
您需要使用:
result.json().someKey.map( //...
如果JSON实际上与您的接口相一致,您甚至可以简单地使用以下内容:
return <UsersData[]>result.json().someKey;