我是一个嵌套的可观察地狱,可以用一只手做。拼合嵌套的Observables
我有下面的代码块
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>[]>
。
我想我可以用flatMap
代替最初的map
,但是这会将对象变成<Observable<Observable<User>>
。
RxJS文档有点难以破译,所以我不确定什么组合switch
,forkJoin
或flatMap
将使我得到我所需要的。我想寄回Observable<User[]>
。任何人都可以将我指向正确的方向吗?
我认为你是更合适的答案 - 尤其是作为问题标题中提到扁平化嵌套观测 - 但我很好奇是否数组顺序始终与源数组的顺序相匹配:使用mergeMap会导致非确定性顺序吗?订单是否取决于哪些被合并的可观察量首先发出? – cartant
这是真的,无论是'merge'还是'mergeAll'都可以保证相同的顺序,这可能是也可能不是问题。然而,如果这是一个问题,你可以用'concatMap'替换'mergeMap',就是这样。 – martin
有趣的是,使用TypeScript的类时,此代码不起作用。编译时,它看起来像'findUsers'方法上的'mergeAll'返回'User []'。这是我看到的行为的链接。 https://jsbin.com/wiwayikiye/edit?js,console任何想法? – user3750194