Javascript 当一个流依赖于另一个流的值时,该怎么办?
我是Rx.js的新手,正在寻找一些关于FRP概念的基本帮助。我有一个使用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
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:)很好,然后你能接受或投票决定答案,以表明它对其他可能在谷歌搜索中偶然发现这个问题的读者是正确的或有用的吗?