0

我正在使用Angular4應用程序。如何使用其他方法中的observable數據?

這裏是我使用來獲得數據 -

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創建邏輯內的訂閱方法。 那麼我該如何解決這個問題呢?我對Angular和observables很陌生。 謝謝。

回答

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

+0

謝謝,這個工程。但是,「每個可觀察的多個值」是什麼意思?有沒有辦法用observable-subscriber方法來做到這一點? – doctorsherlock

+0

承諾可以解決一個價值。可觀察值可以有多個發射值。 HttpClient只有一個值完成,因此可以安全地用promise來替換它。你可以用observable來做到這一點,但是你需要在'subscribe'中移動'pdf創建邏輯'。 – estus

相關問題