Я пытаюсь вложить некоторые http-запросы, используя mergeMap.
Используемый мной API возвращает данные по частям (страницам), поэтому мне нужно делать больше запросов в зависимости от общего количества страниц.
Так как мне нужно сделать запрос, чтобы узнать, сколько страниц. Я всегда делаю первый на первой странице. Благодаря этому я могу узнать, сколько страниц, и начать делать другие запросы (начиная со страницы 2).
Как только я подписываюсь на возвращаемую наблюдаемую информацию, я получаю все данные запросов, выполненных в пределах mergeMap, за исключением результата первого (тот, у которого page = 1).
Есть ли способ вернуть данные первого запроса?
Я пытался запустить внутренний запрос с page = 1, но мне это не нравится, потому что у меня уже есть данные этого запроса.
Это возвращаемое значение функции:
return this.getScrobblesFromAPI( userName, oneWeekAgoUnix, 1 )
.pipe(
mergeMap( data => {
const totalPages: number = parseInt(data['recenttracks']['@attr'].totalPages, 10);
const pages: number[] = [];
//Starting from page 2
for (let i = 2; i <= totalPages; i++) {
pages.push(i);
}
return from(pages).pipe(
mergeMap( page => this.getScrobblesFromAPI(userName, oneWeekAgoUnix, page)),
);
}),
map( data => data['recenttracks']['track'].slice(1) )
);
Эта функция возвращает наблюдаемое для http.get () (HttpClient)
private getScrobblesFromAPI( userName: string, from: number, page: number ){
// http : HttpClient
return this.http.get('url & params');
}