我正在使用{
"username": "sausage",
"email": "blah@gmail.com",
"password": "123456"
}
等待4个可观察值的完成。对于每个变量的最后一个发射值,我使用forkJoin
来触发一些NgRx动作(switchMap
,ConfiguratorLoaded
,GetProjectMembers
):
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 }},则不应触发操作。所以有点暂停。
答案 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动作。