【发布时间】:2020-07-09 12:35:20
【问题描述】:
我觉得我快疯了,因为我对 node 和 typescript 还很陌生……我只是想以同步的方式检索 http get 请求的结果。
给定:
import { Injectable, HttpService } from '@nestjs/common';
import {} from '@nestjs/core';
@Injectable()
export class AppService {
private readonly DATA_URL:string = "https://remote/data.json";
constructor(private httpService:HttpService){}
getSomething(): Array<Object> {
let resp = this.httpService.get(this.DATA_URL); //what do I do now?? It's an observable
}
}
编辑: 我在这里写了完整的代码,因为它可能对其他学习框架的人有用。我使用了周杰伦的回答,但richbai 对理解背后的理论也有很大帮助。如果它仍然可以变得更好,当然会改进/纠正。
- 我添加了一个类型来更好地控制而不是 Object
- 我需要将响应中的日期字段从“yyyy-mm-ddThh24:mi:ss”更改为“yyyy-mm-dd”
-
我还需要根据值过滤响应
getSomething(aFilterValue:number): Observable<RespDTO[]> { return this.httpService.get(this.DATA_URL).pipe( map((axiosResponse : AxiosResponse) => (axiosResponse.data as RespDTO[]) .filter((el:RespDTO) => el.aCode===aFilterValue) .map((el:RespDTO) => ({...el,aDateField:el.aDateField.split('T')[0]}))), ); }
【问题讨论】:
-
例如,您可以将 rxjs Observable 转换为 Promise (
.toPromise()),然后只需await即可。
标签: typescript axios nestjs