최근에 많은 관찰 가능한 질문에 사과드립니다. 그러나 모든 것을 함께 묶는 방법을 파악하는 데는 여전히 어려움을 겪고 있습니다.RxJS Promise를 실행 한 다음 combineLatest
나는 약속 기반 저장소를 사용하여보고 싶지 않은 피드의 이름을 저장하고있는 사용자가 있습니다. 소셜 피드 위젯에서 그들은 필터링하지 않은 각 피드의 최신 기사를 보게됩니다.
하드 코딩 된 피드 목록과 숨기려는 피드에 대한 통합을 원합니다. 필자가 제공 한 API로 작업하려면 각 피드를 개별적으로 검색하기 위해 서비스를 여러 번 호출해야합니다.
내가 노조를 만든 후에는 유틸리티 getFeed
메서드가 생성하는 관찰 결과를 순차적으로 결합하려고합니다.
다음은 일부 pseduocode와 관련이 있습니다.
/**
* This gets the top items from all available social media sources.
* @param limit {number} The number of items to get per source.
* @returns {Observable<SocialItem[]} Returns a stream of SocialItem arrays.
*/
public getTopStories(limit: number = 1): Observable<SocialItem[]> {
// Merge the list of available feeds with the ones the user wants to hide.
const feedsToGet = this.storage.get('hiddenFeeds')
.then(hiddenFeeds => _.union(FeedList, hiddenFeeds));
// Let's use our function that retrieves the feeds and maps them into an Observable<SocialItem[]>.
// We need to splice the list because only 'limit' amount of articles can come back from each feed, and the API cannot accommodate sending anything else than 25 items at a time.
// We need to do mergeMap in order to return a single array of SocialItem, instead of a 2D array.
const feeds$ = feedsToGet.map(feed => this.getFeed(feed).map(res = res ? res.slice(0, limit) : []).mergeMap(val => val));
// Let's combine them and return
return Observable.combineLatest(feed$);
}
편집 : 다시 전에 스파 스 코드에 대한 죄송합니다.
'Observable.fromPromise ...'앞에 오는 것이 작동하지 않는 것처럼 보입니다. 병합 매핑 배열을 사용 하시겠습니까? 보다 광범위하게, 나는 추측 할 위험이있다 :'Promise >>'의 결과에'combineLatest'를 시도하고 있습니까? –
concat
나는 왜 mergeMap을 사용하는지 모르겠습니다. 모든 배열을 하나의 단일 배열로 평면화하는 유일한 방법이었습니다. – EHorodyski
실수로, 'mergeMap' [자동적으로 Iterables을 Observables로 강제 변환] (https://github.com/Reactive-Extensions/RxJS/issues/319)를 보았습니다. 오늘 새로운 것을 배웠습니다! – concat