真的需要这方面的帮助。我一直在尝试不同的事情,但它不起作用。
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;
}));
});
}