RxJS5 与延迟可观察结合的高级示例
Advanced example of RxJS5 combination with delayed observable
嗨,我遇到了 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]...
它与 withLatestFrom
运算符配合得很好:
const result = userStream.withLatestFrom(dbKeyStream) // [user, dbkey]
但是,当我将 .delay()
运算符应用于 dbKeyStream
时,如何才能存档相同的结果?
我建议使用 mergeMap overload with the selectorFunc:
const userData = {
dbKeyPath: 'www.example.com/getDbKey',
users:[
{name:'name1'},
{name:'name2'},
{name:'name3'}
]
};
function getDbKey(path) {
return Rx.Observable.of('the-db-key:'+path)
.do(() => console.log('fetching db key for path: '+ path))
.delay(1000);
}
const userDataStream = Rx.Observable.of(userData)
.mergeMap(
_userData => getDbKey(_userData.dbKeyPath),
(_userData, dbKey) => _userData.users.map(_usr => ({ user: _usr, dbKey }))
)
.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>
这会为您提供输入对象和每个输出值,以便您根据需要组合在一起。
嗨,我遇到了 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]...
它与 withLatestFrom
运算符配合得很好:
const result = userStream.withLatestFrom(dbKeyStream) // [user, dbkey]
但是,当我将 .delay()
运算符应用于 dbKeyStream
时,如何才能存档相同的结果?
我建议使用 mergeMap overload with the selectorFunc:
const userData = {
dbKeyPath: 'www.example.com/getDbKey',
users:[
{name:'name1'},
{name:'name2'},
{name:'name3'}
]
};
function getDbKey(path) {
return Rx.Observable.of('the-db-key:'+path)
.do(() => console.log('fetching db key for path: '+ path))
.delay(1000);
}
const userDataStream = Rx.Observable.of(userData)
.mergeMap(
_userData => getDbKey(_userData.dbKeyPath),
(_userData, dbKey) => _userData.users.map(_usr => ({ user: _usr, dbKey }))
)
.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>
这会为您提供输入对象和每个输出值,以便您根据需要组合在一起。