[英]wait for a promise in success() of an observable subscription
免责声明:这是我所参加课程的一部分练习,但我的教练知道这是否重要。
基本上,我需要在组件中编写一个方法。 提供所有其他服务。 首先,我也有一个观察点。 它发出一个值。 然后,我必须将该值传递给一个返回数组的Promise。
然后,我必须在全部完成后使用console.log('done')。 现在我的问题是,在承诺仍得到解决的同时,订阅的onComplete即()。 这是我的尝试。 recordList最终包含正确的结果,但是它达到了完整的结果,首先将“ done”输出到控制台。
let recordList = [];
public loadData() {
let vm: any = this;
this.dataService.getRecord().subscribe(
record => {
// record is now a single dictionary object
// {'type': 'bookkeeping', 'id': 1}
// for each record type, get its list of attached data
record['data'] = []; // in case it has not record
vm.dataService.recordDetails(record.id).then(recordData => {
// recordData is an array
record['data'] = recordData
vm.recordList.push(record);
});
},
err => {
console.log("error getting record");
},
() => {
console.log('done')
}
)
}
使用Observable.fromPromise,
this.dataService.getRecord().switchMap(record => {
record['data'] = [];
return Observable.fromPromise(vm.dataService.recordDetails(record.id));
}).subscribe((recordData ) => {
record['data'] = recordData
vm.recordList.push(record);
});
您需要退回承诺并解决或拒绝:
loadData(): Promise<any> {
return new Promise((resolve, reject) => {
this.dataService.getRecord().subscribe(d => {
...
resolve(d)
},
(err: HttpErrorResponse) => {
...
reject(err.error);
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.