Angular 等待可观察订阅的成功承诺()
免责声明:这是我正在上课的练习的一部分,但我的导师知道这是否重要 基本上,我需要在我的组件中编写一个方法。提供所有其他服务。首先,我也同意一个可观察的观点。它发出一个值。然后我必须将该值传递给一个承诺,该承诺返回一个数组 然后,当它全部完成时,我必须控制台.log('done')。现在我的问题是,在承诺仍在得到解决的情况下,订阅的未完成(即())。这是我的尝试。recordList最终确实包含了正确的结果,但如果到达完整的片段,则首先将“完成”输出到控制台Angular 等待可观察订阅的成功承诺(),angular,typescript,Angular,Typescript,免责声明:这是我正在上课的练习的一部分,但我的导师知道这是否重要 基本上,我需要在我的组件中编写一个方法。提供所有其他服务。首先,我也同意一个可观察的观点。它发出一个值。然后我必须将该值传递给一个承诺,该承诺返回一个数组 然后,当它全部完成时,我必须控制台.log('done')。现在我的问题是,在承诺仍在得到解决的情况下,订阅的未完成(即())。这是我的尝试。recordList最终确实包含了正确的结果,但如果到达完整的片段,则首先将“完成”输出到控制台 let recordList = []
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')
}
)
}
使用可观察的。从承诺
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);
});
});
}
loadData():承诺{
返回新承诺((解决、拒绝)=>{
this.dataService.getRecord().subscribe(d=>{
...
决议(d)
},
(错误:HttpErrorResponse)=>{
...
拒绝(错误);
});
});
}
您是否必须将您的逻辑放入subscribe
回调中?一般来说,最好是管道您的逻辑。这将允许您从承诺
创建一个可观察的,并在它返回后执行所需的任何逻辑。@WillAlexander感谢您的输入。在你的评论之后,我正在阅读关于管道的文章。你介意分享一个你将如何处理它的示例代码吗?非常感谢。