【发布时间】:2017-01-15 03:06:50
【问题描述】:
背景:我正致力于在@ngrx/store 项目中实施@ngrx/effects 并研究example app。
问题:在BookEffects class file,第50 行,为什么使用takeUntil(...) 而不是take(1)?在这种情况下,两者似乎都完成了同样的事情。
@Injectable()
export class BookEffects {
constructor(private actions$: Actions, private googleBooks: GoogleBooksService) { }
@Effect()
search$: Observable<Action> = this.actions$
.ofType(book.ActionTypes.SEARCH)
.debounceTime(300)
.map((action: book.SearchAction) => action.payload)
.switchMap(query => {
if (query === '') {
return empty();
}
const nextSearch$ = this.actions$.ofType(book.ActionTypes.SEARCH).skip(1);
return this.googleBooks.searchBooks(query)
.takeUntil(nextSearch$)
.map(books => new book.SearchCompleteAction(books))
.catch(() => of(new book.SearchCompleteAction([])));
});
}
@Injectable()
export class GoogleBooksService {
private API_PATH: string = 'https://www.googleapis.com/books/v1/volumes';
constructor(private http: Http) {}
searchBooks(queryTitle: string): Observable<Book[]> {
return this.http.get(`${this.API_PATH}?q=${queryTitle}`)
.map(res => res.json().items || []);
}
retrieveBook(volumeId: string): Observable<Book> {
return this.http.get(`${this.API_PATH}/${volumeId}`)
.map(res => res.json());
}
}
【问题讨论】:
-
请包含代码本身,而不是屏幕截图。而且,顺便说一句,您可以在 GitHub 链接中包含行号,例如 this(按住 shift 键单击行号,这些行将突出显示,等等)
-
@cartant 已修复。我只是想在此处包含行号,而不是让人们点击。但是感谢 Github 链接提示。