如何使用NestJ在HttpService上使用异步/等待?以下代码不起作用:
async create(data) {
return await this.httpService.post(url, data);
}发布于 2018-08-18 18:00:46
HttpModule使用Observable而不是Promise,它不适用于异步/等待。所有HttpService方法都返回Observable<AxiosResponse<T>>。
因此,您可以将其转换为Promise,然后在调用它时使用await,或者只返回Observable并让调用者处理它。
create(data): Promise<AxiosResponse> {
return this.httpService.post(url, data).toPromise();
^^^^^^^^^^^^^
}请注意,return await几乎总是冗余的(除了that之外)。
更新2022
toPromise被否决了。相反,您可以使用firstValueFrom
import { firstValueFrom } from 'rxjs';
// ...
return firstValueFrom(this.httpService.post(url, data))发布于 2021-09-13 07:44:28
当toPromise()被废弃时,您可以用firstValueFrom或lastValueFrom替换它
例如:
const resp = await firstValueFrom(this.http.post(`http://localhost:3000/myApi`)发布于 2018-08-23 19:52:09
rxjs库是最强大的并发包,它选择了表单处理系统事件,如单击、外部请求(如get数据或删除记录)和.
这个图书馆的主要概念是:
处理未来中接收的数据
因此,在可观察的对象中,大多数使用3个参数,如
observablSource.subscribe(
data => { ... },
failure => { ... },
compelete => { ... }
)但是对于大多数后端开发人员来说,承诺使用来自ECMAScript 6特性的,它是JavaScript的原生部分。
默认情况下,在角4+和Nest.js中使用支持可观察的的rxjs。在技术细节方面,您可以找到一个可以自动观察到的变更解决方案。
const data: Observable<any>;
data.from([
{
id: 1,
name: 'mahdi'
},
{
id: 2,
name: 'reza'
},
])现在,您已经从服务器模拟了一个具有可观察类型的请求。如果您想将其转换为,则可以使用链式方法,例如:
data.toPromise();从这个步骤开始,您已经承诺使用对象和表单来更好地附加异步/等待。
async userList( URL: string | URLPattern ) {
const userList = await this.http.get<any>( URL ).toPromise();
...
}https://stackoverflow.com/questions/51910908
复制相似问题