【问题标题】:Introducing back pressure to RxJS stream of drag coordinates将背压引入拖动坐标的 RxJS 流
【发布时间】:2016-01-15 04:36:54
【问题描述】:

如果您尝试我的svg.rx.js 项目中的demo4,使用多点触控设备(例如 Nexus 7),您会注意到 SVG 圆圈落在手指后面。

如果有后面的坐标,我想跳过坐标,但似乎没有那么简单。据我所知,RxJS 并没有真正缓冲这些值。它可能会分拆我的应用程序的订阅调用,一旦发生这种情况,就无法取消它们 - 让它们运行。

有一个非常相似的 SO 问题 11010602,但我当然希望将代码保持在最低限度。

能否请一些更有经验的 RxJS 同仁给我建议?我目前使用的是 RxJS 4.0.7,相关代码是here。谢谢。

我已经阅读了有关Backpressure with RxJS 的信息,但这些方法都不起作用。在应用程序端使用.sample 似乎是最好的选择(试图让它工作)。

编辑:

这是我试图处理它的方式,使用 .sampleSubject 每次处理坐标时都会触发 - 因此将流同步到设备的绘图功能(希望)。我弄错了类型,因为它最终没有.onNext

https://github.com/akauppi/svg.rx.js/blob/backpressure/demo/demo4.js

【问题讨论】:

    标签: svg rxjs


    【解决方案1】:

    我弄错了类型,因为它最终没有 .onNext。

    您需要在主题上直接调用 onNext,以便简化:

    var subject = new Rx.Subject();
    var triggerObs = subject.startWith(true);
    // ... 
    subject.onNext() // rather than triggerObs.onNext();
    

    关于性能和忽略值: Rx 有一个requestAnimationFrame scheduler,也许这可以帮助你。我猜你可以把它提供给dragObsmerge 接受调度程序参数。

    除此之外,RxJS5 应该很多faster

    【讨论】:

    • 谢谢,@Nupf。我相应地更改了代码,但它仍然不起作用。主题的触发似乎并没有让更多的事件通过.sample。我的看法是触发发生得太早,“样本”不会记住。好吧,这对我来说并不重要,而且 RxJS 5.0 的人提到,实际的背压可能会在计划中出现,总有一天。所以也许我会不用。谢谢!
    • 是的,我也是。 triggerObs 似乎在 dragObs 发出新值之前执行示例。如果您查看样本的definition,您可以看到它的意思是只发出每个源 (dragObs) 值一次,即使触发了多个样本 (triggerObs) 事件(在该页面上玩弹珠说明更好) .
    • 交互式马贝图太棒了!我见过它们,但使用的太少了——可能是因为它们不在文档的 RxJS 方面。无论如何,throttleFirst 是我应该使用的,但它似乎只是缺少 RxJS 4.0.7 实现(它应该在)。会提出一个问题。谢谢!
    • 太棒了:)。我得先检查一下节流阀
    • 它在 RxJS 4.x 中不存在,但它应该存在。请参阅上面的 RxJS 问题。它显示在静态图上的reactivex.io/documentation/operators/sample.html 页面中(在 RxJS 下)。
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多