簡體   English   中英

如何通過其他方法使用可觀察的數據?

[英]How to use data from an observable in other methods?

我正在開發Angular4應用。

這是我用來獲取數據的服務-

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']); 
  }
}

然后在我的組件中

export class PrintButtonComponent implements OnInit {

    bookings: any;

    constructor(private service: BookingService) {}

    ngOnInit() {}

    downloadPDF() {      
          this.getBookings(memberID);

          //pdf creation logic
    }

    getBookings(memberID: number) {
          this.service.getMemberBookings(memberID).subscribe(data => this.bookings = data);    
    }

}

問題是我想在downloadPDF方法中使用服務中的數據,因為其中將需要其他數據來創建PDF。 但是,當我從訂閱返回數據或將其設置為屬性時,它給出的是不確定的。 我知道這是由於異步性質造成的,但是我不想將我的pdf創建邏輯放在subscribe方法中。 那么我該如何解決這個問題呢? 我對Angular和Observable相當陌生。 謝謝。

由於上面的代碼不包含每個可觀察到的多個值,並且不需要堅持下去,因此可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM