Я застрял во вложенном наблюдаемом аду и мог сделать с рукой.Сглаживание вложенных наблюдаемых
У меня есть следующий блок кода
return this.findUser(term).map(users => {
return users.map(user => this.getLastLogin(user.user_id).map(last_login => {
user.last_login = last_login;
return user;
}));
});
findUser
возвращает Observable<User[]>
и getLastLogin
возвращает Observable<number>
.
Я в основном надеюсь получить список пользователей, а затем обновить их информацией из другого значения.
Прямо сейчас, указанный код возвращается <Observable<Observable<User>[]>
.
Я думал, что смогу заменить начальный map
на flatMap
, но это превратит объект в <Observable<Observable<User>>
.
Документацию RxJS немного сложно расшифровать, поэтому я не уверен, какая комбинация switch
, forkJoin
или flatMap
приведет меня к тому, что мне нужно.
Я надеюсь вернуть Observable<User[]>
. Может ли кто-нибудь указать мне в правильном направлении?
Я думаю, что вам принадлежит аккуратнее ответ - особенно название на вопрос упоминает уплощение вложенных наблюдаемого - но мне любопытно, как ли порядок массива всегда будет соответствовать порядку исходного массива: будет ли использование 'mergeMap' результатом недетерминированного порядка? Будет ли порядок зависеть от того, какие из них будут сгенерированы? – cartant
Это верно, либо 'merge', либо' mergeAll' гарантирует тот же порядок, который может или не может быть проблемой.Однако, если это проблема, вы можете просто заменить 'mergeMap' на' concatMap' и все. – martin
Интересно, что этот код не работает при использовании классов TypeScript. При компиляции он выглядит так: 'mergeAll' в методе' findUsers' возвращает 'User []'. Вот ссылка на поведение, которое я вижу. https://jsbin.com/wiwayikiye/edit?js,console Любые идеи? – user3750194