У меня есть эта функция в Angular 2, которую я не написал, но которая в настоящее время работает должным образом:
myFunction(): Observable<Song> {
return this.user.getSong$()
.mergeMap((track: Track) => {
if (track.isSingle()) {
return this.getSingle(track.getId());
} else {
throw 'error';
}
});
}
Но мне очень трудно понять некоторые вещи об этом. Первый вопрос: Я прочитал абсолютную тонну , но я не могу понять разницу между mergeMap
и map
.Я не понимаю, что делает mergeMap
.Почему mergeMap
здесь?
Теперь о реальной проблеме, которую я пытаюсь решить.Мне нужно сделать HTTP-вызов и завершить его до того, как он что-нибудь вернетЯ сделал для него другую функцию, которая возвращает Observable
:
populate(sourceType: string, sourceId: number): Observable<object> {
return this.http.get(`//populate/${sourceType}/${sourceId}`)
.map((response: Response) => {
return <string[]> response.json();
});
}
Когда я пытаюсь объединить это с моей другой функцией, я получаю:
myFunction(): Observable<Song> {
return this.user.getSong$()
.mergeMap((track: Track) => {
if (track.isSingle()) {
this.populate('list', track.getId()).subscribe(
() => {}, // I don't care what the request returns,
() => {}, // or if it returns an error.
(result) => { // I only care when it's done.
return this.getSingle(track.getId());
}
);
} else {
throw 'error';
}
});
}
Это не 'не работает вообще, но я не могу отладить вывод сообщения об ошибке и не знаю, как заставить его работать.Помогите?
TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
at Object.subscribeToResult (Rx.js?1551417548052:8237)
at MergeMapSubscriber._innerSub (Rx.js?1551417548052:3336)
at MergeMapSubscriber._tryNext (Rx.js?1551417548052:3333)
at MergeMapSubscriber._next (Rx.js?1551417548052:3318)
at MergeMapSubscriber.Subscriber.next (Rx.js?1551417548052:10743)
at MapSubscriber._next (Rx.js?1551417548052:4975)
at MapSubscriber.Subscriber.next (Rx.js?1551417548052:10743)
at MapSubscriber._next (Rx.js?1551417548052:4975)
at MapSubscriber.Subscriber.next (Rx.js?1551417548052:10743)
at MapSubscriber._next (Rx.js?1551417548052:4975)