typescript - 如何处理 axios httpservice 可观察响应?
问题描述
我想我快疯了,因为我对节点和打字稿还很陌生……我只是想以同步的方式检索 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]}))), ); }
解决方案
如果您需要从 Nest 服务执行此操作,并将结果返回给客户端,您可以简单地返回 observable,Nest 将从那里为您处理订阅。如果您需要进行任何额外的数据处理,您可以在.map
运算符之后使用运算.pipe()
符Observable
。这方面的一个例子可能是只从 axios 响应中获取数据,而不是整个响应(这会有问题,JSON.stringify()
因为它本身有循环引用)。
下面是一个这样的例子
import { Injectable, HttpService } from '@nesjts/common';
import { AxiosResponse } from 'axios';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class HttpConsumingService {
private readonly DATA_URL = 'http://remote/data.json';
constructor(private readonly http: HttpService) {}
callHttp(): Observable<Array<Object>> {
return this.http.get(this.DATA_URL).pipe(
map((axiosResponse: AxiosResponse) => {
return axiosResponse.data;
})
);
}
}
从这里开始,如果您有一个调用 的控制器this.httpConsumingService.callHttp()
,Nest 将调用该服务,订阅 observable,并在后台返回数据。不需要额外的工作。如果您正在寻找有关 Observables 和可用操作的更多信息,learnrxjs.io是一个很好的来源。
推荐阅读
- ajax - GravityView Ajax 链接
- scala - 如何选择取决于不同列内容或列名称的列
- c# - 用一些值填充 C# 2d 数组
- html - 当我将引导程序添加到我的项目时,
- 标记颜色混乱并更改为另一种颜色
- reactjs - 我收到 CORS 错误:Access-Control-Allow-Headers 不允许请求标头字段内容类型
- c# - 如何使用 c# 编辑内联图像的 mapi 属性内容配置?
- cors - 无法修复 Google Cloud 存储上的 CORS 政策
- php - 从其元键获取 WooCommerce 订单项自定义字段值
- r - 我如何知道每个集群中的元素数量?
- r - 在另一个函数中访问函数的定义变量