在订阅中订阅并返回 Angular 中的可观察对象



真的需要这方面的帮助。我一直在尝试不同的事情,但它不起作用。

function1() {
  return this.apiService.get().pipe(map(data => {
    return this.function2();
  }));
  }
function2() {
   const urls = [];
   for (let i = 1; i <= 5; i++) {
      urls.push(
        this.apiService
          .get('/users/?page=' + i)
          .pipe(map(data => data))
      );
    }
   forkJoin(...urls).subscribe(data => {
     data.forEach(element => {
        results = results.concat(element.results);
      });
     return results;
     })
    }

this.someService.function1().subscribe(data => {
console.log(data);
})

所以基本上,我想打印出我在 function1(( 中订阅的数据。但是函数 1(( 依赖于另一个订阅 (( 的函数 2(( 的结果。

当我运行脚本时,我总是未定义,原因是因为函数 1(( 无法等待函数 2(( 返回结果。

我被困在这里了。谢谢

答:我发现我不应该将函数 2 中的结果作为数组返回。

function2() {
   const urls = [];
   for (let i = 1; i <= 5; i++) {
      urls.push(
        this.apiService
          .get('/users/?page=' + i)
          .pipe(map(data => data))
      );
    }
   return forkJoin(urls);

然后基于 funtion2 的输出,我将在函数 1 中完成其余的工作,即 concat((....

你会想要switchMap - 文档

获得function1的结果后,您想"切换"为等待function2

function1() {
    return this.apiService.get().pipe(switchMap(function1Data => {
        // Send function2 whatever data it needs
        // Example:
        return this.function2(function1Data.function2Argument).pipe(map(function2Data => {
            // Combine function1Data and function2Data as needed
            // Example:
            const result = {
                function1Property: function1Data.property,
                function2Property: function2Data.property
            };
            return result;
        }));
    });
}

最新更新