Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当一个流依赖于另一个流的值时,该怎么办?_Javascript_System.reactive_Reactive Programming_Rxjs_Frp - Fatal编程技术网

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

Javascript 当一个流依赖于另一个流的值时,该怎么办?,javascript,system.reactive,reactive-programming,rxjs,frp,Javascript,System.reactive,Reactive Programming,Rxjs,Frp,我是Rx.js的新手,正在寻找一些关于FRP概念的基本帮助。我有一个使用generateWithRelativeTime的流保持游戏循环运行,还有一个流跟踪屏幕分辨率。我当前代码的问题是,我的游戏循环只在屏幕分辨率改变时运行 my model函数生成的流需要res$的最新值 function model(res$) { return res$.map(res => { const rows = ceil(res[1] / CELL.HEIGHT)+1 const col

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

my model函数生成的流需要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
操作符,我建议您查看以下资源:、和


PS:我看到你似乎遵循一个模型-视图-意图架构。出于好奇,你是否在试验
cyclejs

谢谢!这实际上解决了它。预期的行为是游戏循环应该运行,每次运行时,使用res$流的最新分辨率。现在它可以工作:)谢谢!还有,是的,我在玩Cycle.js:)很好,然后你能接受或投票决定答案,以表明它对其他可能在谷歌搜索中偶然发现这个问题的读者是正确的或有用的吗?