我有一个返回Observable的方法。 我需要返回可观察的,但仅在订阅之后:
public dataSelector(params: any): Observable<any> {
job$.subscribe((job) => {
this.folderService
.getFolder(job.parentFolderID)
.subscribe((folder) => {
console.log('hello');
});
});
return job$;
}
在这种情况下,我将返回obseravle job $,但是我只想在完成订阅后才返回它,这意味着仅在console.log('hello')之后被触发。
当前,将首先返回可观察到的job $,只有在触发订阅之后,才会返回
答案 0 :(得分:2)
您需要使用更多的RXJS运算符,以将可观察的对象正确地转换为可返回所需格式的对象,而无需使用任何订阅。 switchMap
运算符可让您返回一个observable,它是内部observable的结果,它可以使您启动并运行:
import { switchMap } from 'rxjs/operators';
public dataSelector(params: any): Observable<any> {
return job$.pipe(
switchMap(job => this.folderService.getFolder(job.parentFolderID)
);
}
调用此函数的人将能够订阅结果,并且一旦内部可观察对象完成,便会收到已解析的文件夹:
dataSelector({}).subscribe(x => */ x is folder here */);