[英]Wait untill observable complete
map((tasks): any => {
return tasks.map(task => ({
...task,
status: this.getStatus(task.owner, task.delegationState, task.assignee, task.id),
}));
});
我在 map() rxjs 運算符中調用 getStatus 方法
getStatus(
owner: string | null,
delegationState: string | null,
assignee: string | null,
id: string): string {
if (assignee) {
if (!owner) {
if (!delegationState) {
this.caseService.getUserOperationHistory({
taskId: id,
entityType: 'T',
operationType: 'Claim',
}).subscribe((res) => {
return 'Claimed';
});
} else {
return 'Assigned';
}
}
if (delegationState === 'PENDING') {
return 'Delegated';
}
if (delegationState === 'RESOLVED') {
return 'Assigned';
}
}
return 'Unassigned';
}
當我執行異步代碼 getUserOperationHistory() 時,代碼是同步執行的,因此由於 getUserOperationHistory() 而返回“Claimed”,它返回“Unassigned”如何等到異步代碼完成?
我會使用forkJoin
進行嵌套調用,從外部subscribe
返回的東西很可能永遠不會有正確的值。 所以我建議如下:
switchMap((tasks: any) => forkJoin(tasks.map(task =>
this.getStatus(...).pipe(
map(data => ({...task, status: data}))
)
)
);
如果getStatus
只返回字符串,那么你可以使用of('stringHere')
返回一個 observable。
並且請不要使用any
,輸入您的數據,它將幫助您!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.