延迟发出的可观察值取决于另一个可观察值

时间:2019-07-25 12:17:52

标签: redux rxjs ngrx

我正在使用{ "username": "sausage", "email": "blah@gmail.com", "password": "123456" } 等待4个可观察值的完成。对于每个变量的最后一个发射值,我使用forkJoin来触发一些NgRx动作(switchMapConfiguratorLoadedGetProjectMembers):

SwitchOrganization

我还有另一个可观察的forkJoin( this.projectsService.getProject(action.projectId), this.flavors$, this.images$, this.storageDefinitions$ ).pipe( switchMap(([project, flavors, images, storageDefinitions]) => [ new ConfiguratorLoaded( flavors, images, storageDefinitions, project ), new GetProjectMembers(action.projectId), new SwitchOrganization( this.getOrganizationById(project.organizationId) ), ]) ); ,类型为loaded$,不在上面的代码示例中。 Observable<boolean>的值为loaded$而不是之前,如何获得3个NgRx动作?只要true的值为{{1 }},则不应触发操作。所以有点暂停。

1 个答案:

答案 0 :(得分:1)

如果我的理解正确,那么您应该可以这样做:

combineLatest([
    this.loaded$,
    this.projectsService.getProject(action.projectId),
    this.flavors$,
    this.images$,
    this.storageDefinitions$
]).pipe(
   filter(([loaded]) => Boolean(loaded)),
   // ...
)

每次this.loaded$流发出时,CombineLatest都会重新发射。

如果this.loaded$发出false,则过滤器将跳过对switchMap的处理。

如果this.loaded$发出true,则过滤器将继续并处理switchMap

然后它有效地“等待” this.loaded$为真,然后再执行您的NgRx动作。