나는 목록이 검색되면, 각 항목 갈 필요 항목의 배열의 관찰 가능한을 반환하는 방법 getList()
이있는 서비스, MyService
,는 관찰 가능한 및 약속
getList(): Observable<Item[]>
같은 뭔가를 결합 MyService
, fillItem(Item)
의 두 번째 방법을 통해.
fillItem(item: Item) {
BackEnd.retrieveDetails(item.id)
.then(data => item.data = data);
}
내가 필요로하는이면 MyService 번 항목의 목록을 방출하는 감시 오브젝트를 반환 할 수 있도록 위의 두 가지 방법을 결합하는 것입니다 :이 방법은 약속을 반환 몇 백 엔드에 요청, 같은 것을 발행 그들 모두는 그들의 데이터로 가득 차있다 (즉, 모든 약속이 일단 해결되면). 내가 그렇게한다면 나는 희망으로 지금까지 시도 무엇
는,,,,
fillAll(items: Item[]) {
const promises = [];
for (let i = 0; i < items.length; i++) {
const item = items[i];
promises.push(this.fillItem(item));
}
const subject = new Subject<Item[]>();
Promise.all(promises).then(res => {
subject.next(items);
},
err => {
subject.error(err);
});
return subject.asObservable();
}
getListWithFilledItems() {
return this.getList()
.map(items => this.fillAll(items))
}
불행히도 Observable<Item[]>
Observable<Observable<Item[]>>
하지 반환 getListWithFilledItems()
방법이 라인을 따라 뭔가입니다.
getListWithFilledItems()
메서드가 Observable<Item[]>
을 반환하도록 코드를 변경하는 방법에 대한 제안이 있으면 감사하겠습니다.
.mergeMap(items => this.fillAll(items))
이 fillAll()
에서 반환하고 준비가되면 그 값을 reemit 관찰에 가입됩니다
실제로 제 코드 작업을 신속하게 처리해 준 것에 대해 감사드립니다. switchMap이 작동하지 않는 동안 mergeMap이 작동하는 이유를 이해하는 데는 아직 어려움을 겪고 있지만 Rx와 Observables는 내가 수년간 (직업적으로) 가장 지적으로 도전하고 자극적 이었음을 인식합니다. – Picci