2017-04-24 57 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

问题是如何删除“如果”;-) –