javascript - 当一个流依赖于另一个流的值时该怎么办?

标签 javascript system.reactive reactive-programming rxjs frp

我是 Rx.js 新手,正在寻找有关 FRP 概念的一些基本帮助。我有一个使用 generateWithRelativeTime 保持游戏循环运行的流,以及一个跟踪屏幕分辨率的流。我当前代码的问题是我的游戏循环仅在屏幕分辨率更改时运行。

我的模型函数生成的流需要 res$ 中的最新值。

function model(res$) {
  return res$.map(res => {
    const rows = ceil(res[1] / CELL.HEIGHT)+1
    const cols = ceil(res[0] / CELL.WIDTH)+1

    return Observable.generateWithRelativeTime(
      initWorld(rows, cols, 1.618),
      noOp,
      world => step(world),
      noOp,
      _ => 100,
      Rx.Scheduler.requestAnimationFrame
    ).timeInterval()
  });
}

function intent() {
  return Observable.fromEvent(window, 'resize')
                   .map(e => [e.currentTarget.innerWidth, e.currentTarget.innerHeight])
                   .debounce(100, Rx.Scheduler.requestAnimationFrame)
                   .startWith([window.innerWidth, window.innerHeight])
}

model(intent())

最佳答案

欢迎来到 FRP 的乐趣。事实上,很难理解你的问题。 当一个流依赖于另一个流的值时该怎么办? 如何连接到 我当前代码的问题是我的游戏循环仅在屏幕分辨率更改时运行。 ?你给出实际的行为,你期望的行为是什么?

由于我对问题的理解有限,我认为您需要将这一行 return res$.map(res => { 替换为 return res$.flatMapLatest(res => {,即使用运算符 flatMapLatest 而不是 map 运算符。

要了解 flatMap 运算符,我建议您查看以下资源:The introduction to reactive programming you've been missingillustrated marblesofficial documentation .

PS:我发现您似乎遵循模型- View -意图架构。出于好奇,您正在尝试使用 cyclejs 吗?

关于javascript - 当一个流依赖于另一个流的值时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890029/

相关文章:

javascript - 如果连接不良或大量数据库连接,Ajax GET 会重复

javascript - ReactJS 项目中 webpack 导入的行为是什么?

javascript - 当预期结果更改时, Electron ipcMain.handle()不触发

c# - 使用 Reactive Extensions (Rx) 进行延迟和重复数据删除

java - 如何迭代 Flux 并与 Mono 混合

java - 从 Observable 获取数组的值

javascript - rxjs 科目应该在类里面公开吗?

javascript - 如何使用 Ajax 连接数据库 (jsp) 检查输入验证

c# - 使用异常处理将 IEnumerable<Task<T>> 转换为 IObservable<T>

c# - MVVM + Reactive + WCF 回调