簡體   English   中英

等到可觀察完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM