2017-09-20 33 views
2

现在我有一个解析器调用的标准服务,并返回一个可观察:等待状态解析(NGRX)

return this.someService.getData() 
     .map(data=> data.json()) 

我想NGRX效果和存储来取代它。当解析器运行时,我想调用被拦截的requestAction,这会产生http请求。一旦数据返回,我将dataReceivedAction与数据分配为有效载荷。

基本上我想在解析器中发送一个动作,并等待新的数据在商店的一部分。我尝试做这种方式:

return Observable.combineLatest(
     Observable.of(
     this.store.dispatch(new requestAction()) 
    ), 
     this.store.select(store => store.dataIWaitFor), 
     (dispatchedAction, dataArrived) => dataArrived 
    ) 
     .skip(1) 

它不工作,我指的是解析器没有渲染成分,但是当每一项结束返回观测量我添加

.do(data => console.log(data)) 

的记录相同的数据。 我做错了什么?

+0

我觉得NGRX自动完成这一点,等待观察到之前解决使其 –

+0

我发现这里的解决方案https://stackoverflow.com/a/45104515/3931068 可观测需要完成 –

回答

0

你可以做这样的事情

@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); 
     }); 
    } 
} 
}