如何在其他方法中使用来自observable的数据?

时间:2017-10-21 12:41:11

标签: javascript angular typescript observable reactive-programming

我正在开发Angular4应用程序。

这是我用来获取数据的服务 -

WebSecurityConfiguration

然后在我的组件中 -

export class BookingService {

  constructor(private http: HttpClient) {}

  getMemberBookings(memberID: number): Observable<any> {
    return this.http.get('http://myapi.com/bookings/member/'+memberID).map(response => response['bookings']); 
  }
}

问题是我想在downloadPDF方法中使用服务中的数据,因为其中有其他数据需要创建PDF。 但是当我从订阅中返回数据或将其设置为属性时,它将给出undefined。我知道这是由于异步性质,但我不想把我的pdf创建逻辑放在subscribe方法中。 那么我该如何解决这个问题呢?我对Angular和observables都很陌生。 谢谢。

1 个答案:

答案 0 :(得分:0)

由于上面的代码不涉及每个可观察的多个值,并且不需要坚持它们,因此可以使用async..await完成此操作而不需要额外的嵌套:

async downloadPDF() {      
      await this.getBookings(memberID);

      //pdf creation logic
}

async getBookings(memberID: number) {
      this.bookings = await this.service.getMemberBookings(memberID).toPromise();
}

与任何其他RxJS运算符一样,必须导入toPromise