javascript - RxJS5 与延迟可观察值结合的高级示例

标签 javascript functional-programming rxjs rxjs5

嘿,我遇到了 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>

这将为您提供输入对象和每个输出值,以便根据需要组合在一起。

关于javascript - RxJS5 与延迟可观察值结合的高级示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740345/

相关文章:

php - 将HTML代码分为两个相等的内容部分,用PHP或JS

javascript - AngularJS 表格 : Fetch Items for second SELECT BOX based on previous input

python - 在函数式编程(或其他方式)中递归时,使用显式状态变量的好处/限制是什么?

javascript - 如何在那个 javascript-array-of-objects-case 中遵循 DRY?

javascript - Observable 已订阅,响应已返回,无法访问字段

meteor - Angular2-Meteor zone() 方法

javascript - 从一系列 promise 中获取值

javascript - 使用 useEffect 更新 useReducer 'state'

javascript - 验证负数

.net - 如何将用英语单词编写的数字解析为 F# 中的等效数字?