免责声明:这是我正在参加的课程的一部分练习,但是我的教练知道这是否重要。
基本上,我需要在组件中编写一个方法。提供所有其他服务。首先,我也有一个观察点。它发出一个值。然后,我必须将该值传递给一个返回数组的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')
}
)
}
答案 0 :(得分:0)
使用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);
});
答案 1 :(得分:0)
您需要返回承诺并解决或拒绝:
loadData(): Promise<any> {
return new Promise((resolve, reject) => {
this.dataService.getRecord().subscribe(d => {
...
resolve(d)
},
(err: HttpErrorResponse) => {
...
reject(err.error);
});
});
}