我有一个类似
export class R {
constructor(
public id: Number,
public dte: Date,
) { }
}
返回R []代码的服务就像:`
return this.http.get(this.serverLocal).map(this.formatDate);
formatDate(res: Response) {
const data = res.json() as R[];
data.forEach(D => {
D.dte = new Date(D.dte);
})
return data;
}
我得到了2个错误:'R'类型中不存在属性'dte'。 我改变了很多代码无济于事。如果我使用ID进行一些更改,但是没有使用dte日期,它会起作用。我做错了什么?
答案 0 :(得分:1)
在回答之前,如果您使用的是Angular 5,请查看HttpClient,因为不再需要json()
。 http get在默认情况下已经返回了一个json。
如果您的json响应只有这两个条目(id
和dte
),您只需执行以下操作:
. . .
import { HttpClient } from '@angular/common/http';
/** rxjs **/
import { Observable } from 'rxjs/Observable';
getStuff(someUrl: string): Observable<Array<R>> {
return this.http.get(someUrl);
}
如果您需要一些错误处理,或者例如,如果请求出错,请重试,您应该执行以下操作:
. . .
import { HttpClient } from '@angular/common/http';
/** rxjs **/
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import {catchError} from 'rxjs/operators/catchError';
getStuff(someUrl: string): Observable<Array<R>> {
return this.http.get(someUrl)
.pipe(
retryWhen(errors =>
// Do Stuff
),
catchError((error: Error) => {
return Observable.throw(error);
})
);
}
没有实际需要映射数据,但是,如果你想这样做,你应该像“:
data.map((dataEntry) => new R(dataEntry))
如果您仍在使用Angular 4.x.x,那么您应该使用:
. . .
import { Http } from '@angular/http';
/** rxjs **/
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import {catchError} from 'rxjs/operators/catchError';
getStuff(someUrl: string): Observable<Array<R>> {
return this.http.get(someUrl)
.pipe(
map((response: Response) => response.json()),
catchError((error: Error) => {
return Observable.throw(error);
})
);
}