我有一个用例,我需要订阅一个Observable然后循环响应,以便Observable使用第一个Observable.
getTasks(taskType: Observable<any>): void {
taskType // Subscribing to the first Observable
.subscribe(
(tasks: any) => {
let row: InboxTasks;
for (const task of tasks) { // Looping through the result
if (task.assigned_id) { // I need to extract that data in order to use it as an argument of the second Observable below
this.auth.getUserById(task.assigned_id).subscribe((user) => this.username = `${user.firstname} ${user.lastname}`);
}
row = {
assigned: this.username ? this.username : '', // Here I use my newly created property
task: task.displayName
};
this.rowData = [
...this.rowData,
row
];
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
使用该方法可以在第二个Observable完成之前执行循环。Observable在那种情况下,我如何设法使用这一秒?
谢谢
您可以首先根据第一个 Observable 的响应收集所有内部 Observables 并等待所有内部 Observables 完成forkJoin:
taskType
.pipe(
concatMap(tasks => {
const observables = [];
for (const task of tasks) {
observables.push(this.auth.getUserById(task.assigned_id));
}
return forkJoin(...observables).pipe(
map(innerResults => ({
innerResults,
tasks
}))
);
})
)
.subscribe(({ innerResults, tasks }) => ...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2046 次 |
| 最近记录: |