NestJs异步httpService调用

时间:2018-08-18 17:08:24

标签: javascript node.js typescript nestjs

如何使用NestJ在HttpService上使用异步/等待? 以下代码不起作用:

async create(data) {
    return await this.httpService.post(url, data);
}

3 个答案:

答案 0 :(得分:4)

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

该库的主要概念是:

  

处理将来接收的数据

因此,您最多在像这样的可观察对象中使用3个参数

observablSource.subscribe(
   data => { ... },
   failure => { ... },
   compelete => { ... }
)

但对于大多数后端开发人员,请使用来自ECMAScript 6 feature Promise ,。

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

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

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

   data.toPromise();

从这一步开始,您已承诺对象和表单会更好地使用它来附加 async / await

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

答案 1 :(得分:3)

kv = [(['one', 'two', 'three'], 1),(['one2', 'two2', 'three2'] , 2)] d = {k:v for kl,v in kv for k in kl} 使用HttpModule而不是Observable,这不适用于异步/等待。所有Promise方法都返回HttpService

因此,您可以将其转换为Observable<AxiosResponse<T>>,然后在调用它时使用await,也可以只返回Promise并让调用者处理它。

Observable

请注意,create(data): Promise<AxiosResponse> { return this.httpService.post(url, data).toPromise(); ^^^^^^^^^^^^^ } 几乎总是(除try catch之外)总是多余的。

答案 2 :(得分:1)

以下是工作代码的完整示例:

.toPromise()实际上丢失了

async getAuthToken() {
    const payload = {
      "SCOPE": this.configService.get<string>('SCOPE'),
      "EMAIL_ID": this.configService.get<string>('EMAIL_ID'),
      "PASSWORD": this.configService.get<string>('PASSWORD'),
    };
    const url = this.configService.get<string>('AUTHTOKEN_URL')
    const response = await this.httpService.post(
      url,
      payload
    ).toPromise();
    console.log(response.data);
    return response.data;
  }