我是一個嵌套的可觀察地獄,可以用一隻手做。拼合嵌套的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