NestJs异步httpService调用

And*_*eri 2 javascript node.js typescript nestjs

如何在HttpService使用NestJs时使用Async / Await?以下代码不起作用:

async create(data) {
    return await this.httpService.post(url, data);
}
Run Code Online (Sandbox Code Playgroud)

Gus*_*ter 28

由于toPromise()已弃用,您可以将其替换为firstValueFromlastValueFrom

例如:

const resp = await firstValueFrom(this.http.post(`http://localhost:3000/myApi`)
Run Code Online (Sandbox Code Playgroud)

https://rxjs.dev/deprecations/to-promise


Mah*_*ani 6

rxjs库是功能最强大的并发程序包,它选择了表单处理系统事件(例如单击),外部请求(例如获取数据或删除记录和...)。

该库的主要概念是:

处理将来接收的数据

因此,您通常在可观察对象中使用3个参数,例如

observablSource.subscribe(
   data => { ... },
   failure => { ... },
   compelete => { ... }
)
Run Code Online (Sandbox Code Playgroud)

但对于大多数后端开发人员而言,请使用ECMAScript 6功能提供的Promises,它是JavaScript的本机部分。

Angular 4+Nest.js中,默认情况下使用支持Observable的rxjs。在技​​术细节中,您可以找到自动观察到的承诺更改解决方案。

const data: Observable<any>;
data.from([
   {
      id: 1,
      name: 'mahdi'
   }, 
   {
      id: 2,
      name: 'reza'
   },
 ])
Run Code Online (Sandbox Code Playgroud)

现在您已经模拟了服务器中具有可观察类型的请求。如果要将其转换为Pormise,请使用链接方法,例如:

   data.toPromise();
Run Code Online (Sandbox Code Playgroud)

从这一步开始,您已承诺对象和表单将更好地使用它来附加异步/等待

 async userList( URL: string | URLPattern ) {
    const userList = await this.http.get<any>( URL ).toPromise();
    ...
 }
Run Code Online (Sandbox Code Playgroud)


Kim*_*ern 5

HttpModule用途Observable不是Promise不与异步/ AWAIT工作。所有HttpService方法都返回Observable<AxiosResponse<T>>

因此,您可以将其转换为a Promise,然后在调用它时使用await,或者仅返回Observable并让调用者处理它。

create(data): Promise<AxiosResponse> {
    return this.httpService.post(url, data).toPromise();
                                           ^^^^^^^^^^^^^
}
Run Code Online (Sandbox Code Playgroud)

注意,return await几乎(除了try catch)总是多余的。