2017-09-20 38 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); 
     }); 
    } 
} 
}