如何使用其他方法中的observable数据?
问题描述:
我正在使用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很陌生。 谢谢。
答
由于上面的代码中不涉及每观察到的多个值,并不需要坚持他们没有多余的嵌套,这可以用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
。
谢谢,这个工程。但是,“每个可观察的多个值”是什么意思?有没有办法用observable-subscriber方法来做到这一点? – doctorsherlock
承诺可以解决一个价值。可观察值可以有多个发射值。 HttpClient只有一个值完成,因此可以安全地用promise来替换它。你可以用observable来做到这一点,但是你需要在'subscribe'中移动'pdf创建逻辑'。 – estus