从HttpModule中可观察到的RxJS检索数据

随机位

我无法理解如何在NestJS应用程序中map使用数据属性HttpService据我了解,这Observable只是包装axios这是一些示例代码:

interface Todo {
   task: string,
   completed: false
}

import {
  Injectable,
  HttpService,
  Logger,
  NotFoundException,
} from '@nestjs/common'
import { map } from 'rxjs/operators

async getTodo(todoUrl: string): Todo {
   const resp = this.httpService
      .get('https://example.com/todo_json')
      .pipe(map(response => response.data)) // map task/completed properties?
   return resp
}

resp在这种情况下,似乎是类型Observable如何仅检索要用map于此请求的数据属性以返回Todo接口?

杰伊·麦克多尼尔

默认情况下,Nest会为您订阅可观察对象,它会从您的服务中返回可观察对象。在这种情况下,您可以执行以下操作

@Injectable()
export class TodoService {

  constructor(private readonly http: HttpService) {}

  getTodos(todoUrl: string): Observable<Todo> {
    return this.http.get(todoUrl).pipe(
      map(resp => resp.data),
    );
  }

}

只要您有一个控制器类调用this.todoSerivce.getTodos(todoUrl)并返回它,响应就会被发送出去。

但是,如果您因为对它们更加习惯而希望兑现承诺,则可以.toPromise()在可观察链上使用一种方法,现在可以等待它(尽管它会变慢,因为它必须等待可观察物发出完整事件)。

范例.toPromise()

@Injectable()
export class TodoService {

  constructor(private readonly http: HttpService) {}

  getTodos(todoUrl: string): Todo {
    const myTodo = await this.http.get(todoUrl).pipe(
      map(resp => resp.data),
    ).toPromise();
    return myTodo;
  }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章