Это мой текущий эпос, который я написал:
const storiesURL = 'https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty';
const topStoryURL = id => `https://hacker-news.firebaseio.com/v0/item/${id}.json?print=pretty`;
const maxAtOnce = 15;
const fetchStoriesEpic = action$ => action$.pipe(
ofType(actions.FETCH_STORIES),
debounceTime(100),
switchMap(() => ajax.getJSON(storiesURL)), // 1. After that I have an array of ids
map(ids => ids.slice(0, maxAtOnce).map(topStoryURL)), // 2. After that I have an array of 15 of the latest ids
mergeMap(urls => from(urls)), // 3. After that I have those URLs
mergeMap(url => ajax.getJSON(url), null, 3), // 4. After that I have those responses
scan((acc, val) => [...acc, val] , []), // 5. Here I accumulate the responses into an array of stories
map(stories => actions.fetchStoriesFullfilled(stories)), // 6. Here I dispatch an action, so it passes those stories once at a time as they arrive
// ignoreElements(),
);
На FETCH_STORIES
я делаю свой атрибут loading
внутри состояния равным true
. Я хотел бы установить значение false, когда эти запросы завершаются, но не после одного из них, а после того, как они завершают все (в данном случае 15 запросов).
Как мне этого добиться?
Кстати - это обычная модель? Знаете ли вы какие-либо ресурсы, где я могу найти шаблоны RxJS для асинхронных действий (которые я на самом деле буду использовать)?