Angular 11 的问题 -<any> RXJS 的类型承诺中不存在属性名称



我一直在Angular 11的一个项目中工作,在那里我使用HttpClientModule和RxJS来共同构建SWAPI。我有这段代码和我的get the people,但我不能,因为当我试图将数据转换为JSON时,我会得到消息";类型promise上不存在属性名称";

我的服务代码是:

import { Injectable } from '@angular/core';
import { People } from './people';
import { Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import 'rxjs/add/operator/catch'
import { HttpClient } from '@angular/common/http';
@Injectable()
export class PeopleService {
constructor(private http: HttpClient) { }
getPeople(): Observable<People[]> {
return this.http
.get<People[]>("https://swapi.co/api/people")
.pipe(
map(this.toJSON),
catchError(err => this.handleError)
)
}
private toJSON(res: Response) {
const json = res.json();
return json.results || json.data;
}
}

默认情况下,Angular从API调用接收数据作为JSON,因此不需要转换

将代码简化为


import { Injectable } from '@angular/core';
import { People } from './people';
import { Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class PeopleService {
constructor(private http: HttpClient) { }
getPeople = ()=>
this.http.get<People[]>("https://swapi.co/api/people").pipe(
map(this.extractData),
catchError(err => this.handleError)
)
private extractData = (res: Response) => json.results || json.data;
}

你可以看看下面的演示

看起来并没有向toJSON函数传递任何内容;但是您正在将toJSON函数传递给映射。

我会这样写:

map((result) => this.toJSON(result)),

我会抛出很多调试器语句来弄清楚错误的确切位置和内容。从你的帖子中我不清楚它是在toJSON方法中还是在映射管道函数中。

最新更新