在同一个函数中等待订阅

Wait for subscription in the same function

我想知道如何在 If-Else 分支中等待所有 REST 调用完成,即使 Else 端没有 REST 调用。

这是一个例子:

createNewList(oldList: any[]) {
 const newList = [];
 oldList.forEach(element => {
   if (element.isAwesome) {
     this.RESTCall().subscribe(result => {
       element.property = result;
       newList.push(element);
     });
   } else {
    newList.push(element);
   }
 });

 // wait here for all elements of RESTCall, then:
 return newList;
}

希望你能关注我。 当然,在当前版本中,restcalls 需要更长的时间并且函数过早地传输列表。

我的第一个方法是将不同的、更高级别的可观察对象添加到列表中,通过 mergeAll (https://www.learnrxjs.io/learn-rxjs/operators/combination/mergeall) 合并它们,然后执行这个 complete() 函数。但这对我来说似乎很曲折。

你有什么提示或流程可以帮助我更轻松地解决此类问题吗?

您可以将您的列表变成可观察值列表,这样更容易推理。

const tasks = oldList.map(element =>
  element.isAwesome ? performRestCall(element) : of(element));

performRestCall(element: any): Observable<any> {
  return this.RESTCall().pipe(
    map(result => {
      element.property = result;
      return element;
    })
  );
}

然后你可以用forkJoin得到所有的结果:

forkJoin(tasks).subscribe(newList => {
  console.log(newList);
})