0

私は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);  
    } 

} 

での問題は、私がサービスからのデータを使用したいですPDFを作成するために必要な他のデータがあるので、downloadPDFメソッド。 しかし、サブスクリプションからデータを返すか、プロパティに設定すると、定義されていません。私はこれが非同期性のためであることを理解していますが、自分のpdf作成ロジックをsubscribeメソッドの中に入れたいとは思いません。 どうすればこの問題を解決できますか?私はAngularとobservablesにはかなり新しいです。 ありがとうございます。

答えて

0

上記のコードが観測ごとに複数の値を伴わず、余分なネスティングで、これはasync..awaitで行うことができ、それらに固執する必要はありませんので。他のRxJSオペレーターとして

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

     //pdf creation logic 
} 

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

toPromiseをインポートする必要があります。

+0

ありがとうございます。しかし、「観測可能な複数の値」はどういう意味ですか?そして、観測可能なサブスクライバメソッドでこれを行う方法はありませんか? – doctorsherlock

+0

約束は、それが解決する一つの価値を持つことができます。オブザーバブルには、複数の出力値を指定できます。 HttpClientには1つの値しかありませんので、安全に置き換えることができます。これを観測可能にすることはできますが、 'subscribe'の中で 'pdf creation logic'を動かす必要があります。 – estus

関連する問題