仅在订阅后返回可观察值

时间:2019-01-24 21:52:34

标签: angular rxjs observable

我有一个返回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 $,只有在触发订阅之后,才会返回

1 个答案:

答案 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 */);