Angular6 如何在rxjs的map操作符中处理array.map 从'@angular/core'导入{Injectable}; 从'@angular/common/http'导入{HttpClient,HttpResponse}; 从“rxjs”导入{Observable}; 从“rxjs/operators”导入{catchError}; 导入“rxjs/add/observable/throw”; 从“rxjs/operators”导入{map,tap}; 导入“rxjs/add/operator/map” 从“../models/Entity”导入{Entity}; @注射的({ providedIn:'根' }) 导出抽象类RestService{ 构造函数(受保护的http:HttpClient){} 抽象getUri():字符串; 抽象getInstance():实体; getAll():可观察{ 返回this.http.get(`this.getUri()}`).pipe(map(response=>response.map(item=>{returnthis.getInstance().deserialize(item)})); } }

Angular6 如何在rxjs的map操作符中处理array.map 从'@angular/core'导入{Injectable}; 从'@angular/common/http'导入{HttpClient,HttpResponse}; 从“rxjs”导入{Observable}; 从“rxjs/operators”导入{catchError}; 导入“rxjs/add/observable/throw”; 从“rxjs/operators”导入{map,tap}; 导入“rxjs/add/operator/map” 从“../models/Entity”导入{Entity}; @注射的({ providedIn:'根' }) 导出抽象类RestService{ 构造函数(受保护的http:HttpClient){} 抽象getUri():字符串; 抽象getInstance():实体; getAll():可观察{ 返回this.http.get(`this.getUri()}`).pipe(map(response=>response.map(item=>{returnthis.getInstance().deserialize(item)})); } },angular6,Angular6,我正在编写上述反序列化JSON响应的代码,并收到以下错误: core.js:1542错误类型错误:response.map不是函数 在MapSubscriber.project上(rest.service.ts:20) 在MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber.\u下一步 (地图js:35) 在MapSubscriber.push../node_modules/rxj

我正在编写上述反序列化JSON响应的代码,并收到以下错误:

core.js:1542错误类型错误:response.map不是函数 在MapSubscriber.project上(rest.service.ts:20) 在MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber.\u下一步 (地图js:35) 在MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (订户:js:54) 在MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber.\u下一步 (地图js:41) 在MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (订户:js:54) 在FilterSubscriber.push../node_modules/rxjs/_esm5/internal/operators/filter.js.FilterSubscriber.\u下一步 (filter.js:38) 在FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (订户:js:54) 在MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber.notifyNext (mergeMap.js:79) 在InnerSubscriber.push../node_modules/rxjs/_esm5/internal/InnerSubscriber.js.InnerSubscriber.\u下一步 (InnerSubscriber.js:15) 在InnerSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (订户:js:54)


我找不到解决这个错误的方法。我是不是遗漏了什么?

以下是你可以做到的。在您的代码中,响应不是数组,或者至少代码不理解它是数组还是什么!因此,如果您确定响应的类型为
Entity[]
,则必须强键入它。否则,您可以始终将其键入为
any[]
,而
response.map()
仍可以工作

import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse } from '@angular/common/http';

import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
import 'rxjs/add/observable/throw';
import { map, tap } from 'rxjs/operators';
import 'rxjs/add/operator/map'
import { Entity } from '../models/Entity';
@Injectable({
  providedIn: 'root'
})
export abstract class RestService<T> {

  constructor(protected http: HttpClient) { }
  abstract getUri(): string;
  abstract getInstance(): Entity;
  getAll(): Observable<Entity[]> {
    return this.http.get<Entity[]>(`${this.getUri()}`).pipe(map(response => response.map(item => { return this.getInstance().deserialize(item) })));
  }
}
getAll():可观察{
返回this.http.get(`${this.getUri()}`).pipe(
映射((响应:实体[])=>{
map(项:Entity=>{
返回此.getInstance().deserialize(项)
})
}
));
}

希望有帮助。:)

你确定回答的形式吗?对不起,我不明白你的问题?你能重复一遍吗。。非常感谢。
  getAll(): Observable<Entity[]> {
    return this.http.get<Entity[]>(`${this.getUri()}`).pipe(
       map((response: Entity[]) => {
         response.map(item: Entity => { 
            return this.getInstance().deserialize(item) 
         })
       }
    ));
  }