NestJS Http 模块
NestJS Http Module
我从 nestJS 文档 (https://docs.nestjs.com/techniques/http-module#http-module) 中获取了这个示例,这是我的问题的一个最小示例:
@Injectable()
export class CatsService {
constructor(private httpService: HttpService) {}
findAll(): Observable<AxiosResponse<Cat[]>> {
return this.httpService.get('http://localhost:3000/cats');
}
}
如何从 Observable> 中提取实际的猫数组?
我尝试了以下方法,但它给了我一个订阅者对象,我也不知道如何解包以获取实际数据。
const cats = await this.catsService.findAll().subscribe((val) => val);
试试这个:
findAll(): Observable<Cat[]> {
return this.httpService.get('http://localhost:3000/cats')
.pipe(map(response => response.data);
}
@Injectable()
export class CatsService {
constructor(private httpService: HttpService) {}
findAll(): Promise<Cat[]> {
return this.httpService.get('http://localhost:3000/cats').toPromise();
}
}
const cats = await this.catsService.findAll().data
对我有用。
现在不推荐使用 .toPromise()
检查这个:https://rxjs.dev/deprecations/to-promise
下面列出的是使用新方法的示例
2021 年 10 月更新
import { lastValueFrom } from 'rxjs';
.
.
.
const observable = await this.httpService.get('url').pipe(map((res) => res.data));
// you can use the data object now !!
const data = await lastValueFrom(observable);
我从 nestJS 文档 (https://docs.nestjs.com/techniques/http-module#http-module) 中获取了这个示例,这是我的问题的一个最小示例:
@Injectable()
export class CatsService {
constructor(private httpService: HttpService) {}
findAll(): Observable<AxiosResponse<Cat[]>> {
return this.httpService.get('http://localhost:3000/cats');
}
}
如何从 Observable
const cats = await this.catsService.findAll().subscribe((val) => val);
试试这个:
findAll(): Observable<Cat[]> {
return this.httpService.get('http://localhost:3000/cats')
.pipe(map(response => response.data);
}
@Injectable()
export class CatsService {
constructor(private httpService: HttpService) {}
findAll(): Promise<Cat[]> {
return this.httpService.get('http://localhost:3000/cats').toPromise();
}
}
const cats = await this.catsService.findAll().data
对我有用。
现在不推荐使用 .toPromise()
检查这个:https://rxjs.dev/deprecations/to-promise
下面列出的是使用新方法的示例
2021 年 10 月更新
import { lastValueFrom } from 'rxjs';
.
.
.
const observable = await this.httpService.get('url').pipe(map((res) => res.data));
// you can use the data object now !!
const data = await lastValueFrom(observable);