[英]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 重載與 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>
這使您可以根據需要將輸入對象和每個輸出值組合在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.