2017-04-24 23 views
0

我有一個if控制語句,以便在從服務檢索數據的情況下返回操作,如果不返回另一個操作以從另一個Web API獲取數據。這是一個鏈接效果操作,其中有另一個處理LOADFROMWEBAPI操作的效果。如何重構從@ngrx效果中刪除控制語句?

是否有更好的方法並避免if控制語句,並返回一個動作,如LoadFromWebAPI只?哪裏可以返回行動SearchCompleteAction是問題 - 有效還是減速?

@Effect() 
    search$: Observable<Action> = this.actions$ 
    .ofType(book.SEARCH) 
    .debounceTime(300) 
    .map(toPayload) 
    .switchMap(query => { 
     if (query === '') { 
     return empty(); 
     } 

     const nextSearch$ = this.actions$.ofType(book.SEARCH).skip(1); 

     return this.googleBooks.searchBooks(query) 
     .takeUntil(nextSearch$) 
     .map(books => { 
     if (data === undefined) { 
      return new book.LoadFromWebAPI(query); 
     } else { 
      return new book.SearchCompleteAction(books); 
     } 
    }) 
     .catch(() => of(new book.SearchCompleteAction([]))); 
    }); 

回答

0
@Effect() 
search$: Observable<Action> = this.actions$ 
    .ofType(book.SEARCH) 
    .debounceTime(300) 
    .map(toPayload) 
    .filter(query => query !== '') 
    .switchMap(query => { 
    const nextSearch$ = this.actions$.ofType(book.SEARCH).skip(1); 
    return this.googleBooks.searchBooks(query) 
     .takeUntil(nextSearch$) 
     .map(books => data === undefined ? new book.LoadFromWebAPI(query) : new book.SearchCompleteAction(books)) 
     .catch(() => of(new book.SearchCompleteAction([]))); 
    }); 
+0

您已經使用三元運算符是等同於'''if'''聲明。兩者都是控制語句。 –

+0

問題是如何刪除「如果」;-) –