Javascript RxJS5与延迟可观测数据组合的高级示例

Javascript RxJS5与延迟可观测数据组合的高级示例,javascript,functional-programming,rxjs,rxjs5,Javascript,Functional Programming,Rxjs,Rxjs5,Hy,我遇到了RxJS组合运算符的问题 以下是示例对象: const userData = { dbKeyPath: 'www.example.com/getDbKey', users:[ {name:'name1'}, {name:'name2'}, {name:'name3'} ] } 使其可见: const userDataStream = Rx.Observ

Hy,我遇到了RxJS组合运算符的问题

以下是示例对象:

const userData = {
        dbKeyPath: 'www.example.com/getDbKey',
        users:[
            {name:'name1'},
            {name:'name2'},
            {name:'name3'}
        ]
    }
使其可见:

const userDataStream  = Rx.Observable.of(userData)
const dbKeyStream : string = this.userDataStream.mergeMap(_userData => getDbKey(_userData.dbKeyPath))
const userStream = this.userDataStream.pluck('users').mergeMap(_users=>Rx.Observable.from(_users))
我的预期结果是具有组合观测值的流:

[user[0],dbKey],[user[1],dbKey],[user[2],dbKey]... 
它可以很好地与
with latestfrom
运算符配合使用:

const result = userStream.withLatestFrom(dbKeyStream) // [user, dbkey]
但是,当我将
.delay()
操作符应用于
dbKeyStream
时,如何存档相同的结果?

我建议使用:

const userData={
dbKeyPath:'www.example.com/getDbKey',
用户:[
{name:'name1'},
{name:'name2'},
{name:'name3'}
]
};
函数getDbKey(路径){
返回Rx.Observable.of('the-db-key:'+路径)
.do(()=>console.log('fetching db key for path:'+path))
.延迟(1000);
}
const userDataStream=Rx.Observable.of(userData)
.合并地图(
_userData=>getDbKey(_userData.dbKeyPath),
(_userData,dbKey)=>_userData.users.map(_usr=>({user:_usr,dbKey}))
)
.subscribe(console.log)

谢谢,但我不能接受,因为我只需要发出一次请求,并对
用户使用相同的结果,我已经更新了代码示例,让您看到对于每个
dbKey
它只执行
getDbKey()
一次,并将此结果用于
用户
阵列中的每个用户。他们为什么将
flatMap
重命名为
mergeMap
?因为名称
flatMap
具有误导性。它在实现中使用了
.merge()
操作符,就像
.concatMap
使用
.concat()
一样,因此他们决定将其重命名为
.mergeMap()
,让您知道将要发生什么。