现在我有一个解析器调用标准服务并返回一个Observable:
return this.someService.getData()
.map(data=> data.json())
我想用ngrx效果和存储替换它。当运行解析器时,我想调度由effect截取的requestAction,这会产生http请求。返回数据后,我将dataReceivedAction作为有效负载发送数据。
基本上我想在解析器中发送一个动作,并等到新数据在商店的一部分。我试着这样做:
return Observable.combineLatest(
Observable.of(
this.store.dispatch(new requestAction())
),
this.store.select(store => store.dataIWaitFor),
(dispatchedAction, dataArrived) => dataArrived
)
.skip(1)
它不起作用,我的意思是解析器不会渲染组件,但是在每个返回的Observable的末尾我添加
.do(data => console.log(data))
记录相同的数据。 我做错了什么?
答案 0 :(得分:1)
你可以做这样的事情
@Injectable()
export class SomeGuard implements CanActivate {
constructor(private store: Store<AppState>) {}
waitForDataToLoad(): Observable<Something> {
return this.store.select(state => state.something)
.filter(something => something && !something.empty);
}
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
this.store.dispatch({type: LOAD_something});
return this.waitForDataToLoad()
.switchMap(() => {
return Observable.of(true);
});
}
}
}