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

相关问题