标签: reactive-programming

为什么这个Yampa球弹跳进入无限循环?

我正试图用Yampa-Framework模拟一个弹跳球:给定一个初始的x位置,高度和速度,球应该根据重力规则弹跳.信号功能以"提示 - 事件"作为输入,这个想法是"当球被倾斜时,它的速度应该加倍".

球反弹很好,但每次有小费事件时,该功能都会进入无限循环.我想我可能需要添加一个延迟(dSwitch,pre,notYet?),但我不知道如何.任何帮助,将不胜感激!

{-# LANGUAGE Arrows #-} 

module Ball where

import FRP.Yampa

type Position  = Double
type Velocity  = Double
type Height    = Double

data Ball = Ball {
      height :: Height,
      width  :: Position,
      vel    :: Velocity
} deriving (Show)

type Tip = Event ()

fly :: Position -> (Height, Velocity) -> SF Tip (Ball, Event (Height,Velocity))
fly w0 (h0, v0) = proc tipEvent -> do
     let tip = (tipEvent == Event ())
     v <- (v0+) ^<< integral …
Run Code Online (Sandbox Code Playgroud)

haskell frp reactive-programming

10
推荐指数
1
解决办法
580
查看次数

使用异步模式(queue.BeginReceive,queue.EndReceive)使用Reactive扩展(Rx)进行MSMQ消息接收

我一直在使用Rx一段时间用于我的项目上的事件,并专门用于Socket编程,其中很好的部分是它做得很好.管理我的代码,性能优势,更好地执行和解释.

最近我必须修改我的项目的流程,我需要将所有传入的数据(从套接字操作)转储到队列中(使用MSMQ实现作为排队决定).

由于MSMQ提供异步调用以从队列中取消消息(但是以一种奇怪的模式).我现在一直在努力将Rx用于此目的,但是能够这样做.

问题:有人可以给我一个干净的代码示例来实现Rx,以便使用异步模式从队列接收消息.

我需要MSMQ的异步运算符实现类似于这样的东西

var data = Observable.FromAsyncPattern<byte[]>(
                        this.receiverSocket.BeginReceive,
                        this.receiverSocket.EndReceive(some parameters);
Run Code Online (Sandbox Code Playgroud)

提前致谢.*欢呼*到Rx和.NET

reactive-programming system.reactive

10
推荐指数
1
解决办法
2243
查看次数

Scala.React与Qt信号和插槽

随着Scala.React的兴起,我想知道当使用Qt作为Scala程序的GUI框架时,Qt的Signals&Slots机制是否会过时.两种方法中的一种如何在以下每个类别中表现出色?

  • 易于编码,简洁明了
  • 表达性:是否有任何技术提供了另一种技术不具备的可能性(就像WPF的依赖属性的强制机制一样)?
  • 编译时间类型安全性,例如使用QtScript定义信号和插槽时
  • 性能 - 但它在GUI中实际上是否重要?

假设Scala.React已经处于完成状态并且有很好的文档记录:您何时更喜欢一种方法而不是另一种方法?

qt functional-programming scala frp reactive-programming

10
推荐指数
0
解决办法
695
查看次数

使用Reactive Extensions搜索TextChanged

我试图在具有10000多条记录的数据库表上实现即时搜索.

搜索文本框内的文本发生更改时搜索开始,当搜索框变空时,我想调用另一种加载所有数据的方法.

此外,如果用户更改搜索字符串,而正在加载另一个搜索的结果,则应停止加载这些结果以支持新搜索.

我像下面的代码一样实现它,但我想知道是否有更好或更清晰的方法来使用Rx(Reactive Extension)运算符,我觉得在第一个observable的subscribe方法中创建第二个observable比声明性的,对于if语句也是如此.

var searchStream = Observable.FromEventPattern(s => txtSearch.TextChanged += s, s => txtSearch.TextChanged -= s)
    .Throttle(TimeSpan.FromMilliseconds(300))
    .Select(evt =>
        {
            var txtbox = evt.Sender as TextBox;
            return txtbox.Text;
        }
    );

searchStream
    .DistinctUntilChanged()
    .ObserveOn(SynchronizationContext.Current)
    .Subscribe(searchTerm =>
        {
            this.parties.Clear();
            this.partyBindingSource.ResetBindings(false);
            long partyCount;
            var foundParties = string.IsNullOrEmpty(searchTerm) ? partyRepository.GetAll(out partyCount) : partyRepository.SearchByNameAndNotes(searchTerm);

            foundParties
                .ToObservable(Scheduler.Default)
                .TakeUntil(searchStream)
                .Buffer(500)
                .ObserveOn(SynchronizationContext.Current)
                .Subscribe(searchResults =>
                    {
                        this.parties.AddRange(searchResults);
                        this.partyBindingSource.ResetBindings(false);
                    }
                    , innerEx =>
                    {

                    }
                    , () => { }
                );
        }
        , ex =>
        {
        }
        , …
Run Code Online (Sandbox Code Playgroud)

.net c# reactive-programming system.reactive

10
推荐指数
1
解决办法
3397
查看次数

从流onError恢复的惯用方法

免责声明:它是以前针对2个依赖流问题的安全更新的延续

处理允许流不终止的RxJS(或任何其他RX实现)中的错误的惯用方法是什么?

相关代码是

function convert(unit, value) {
    var request = {};
    request[unit] = value;

    var conversion = $.ajax({
        method: 'POST',
        url: './convert.php',
        data: request,
        dataType: 'json'
    }).promise();

    return Rx.Observable.fromPromise(conversion).takeUntil(inInput.merge(cmInput));
}

var cmElement = document.getElementById('cm'),
    inElement = document.getElementById('in');

var cmInput = Rx.Observable.fromEvent(cmElement, 'input').map(targetValue),
    inInput = Rx.Observable.fromEvent(inElement, 'input').map(targetValue);

var inches = cmInput
    .flatMap(convert.bind(null, 'cm'))
    .startWith(0);

var centimeters = inInput
    .flatMap(convert.bind(null, 'in'))
    .startWith(0);
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到我们使用输入字段更改流convert并将其传递给将其转换为另一个单元的函数,并进一步传递结果.

如果在$.ajax()调用期间发生错误,则它会向上传播,整个inchescetimeters流停止(实际上是预期的).

但是如何实现它呢?

这样我就可以优雅地处理错误,比如显示错误消息,并在新数据到达时再试一次?

我目前的想法是引入像Haskell这样的复合类型Data.Either …

javascript reactive-programming reactive-extensions-js rxjs

10
推荐指数
1
解决办法
1683
查看次数

R Shiny:快速反应图像显示

我正试图反应性地在我闪亮的应用程序中显示图像.我已经在server.R脚本中成功完成了以下操作:

output$display.image <- renderImage({

    image_file <- paste("www/",input$image.type,".jpeg",sep="")

    return(list(
      src = image_file,
      filetype = "image/jpeg",
      height = 520,
      width = 696
    ))

  }, deleteFile = FALSE)
Run Code Online (Sandbox Code Playgroud)

但它很慢.

但是,将其中一个图像嵌入到ui.R脚本中是非常快的,如下所示:

tabPanel("Live Images", img(src = "img_type1.jpeg"))
Run Code Online (Sandbox Code Playgroud)

为什么会有这样的差异?有没有办法让反应图像看起来更快?

r image reactive-programming shiny

10
推荐指数
1
解决办法
3811
查看次数

RxJS:从Observable.fromPromise拆分数组结果

我在这里使用RxJS,我似乎无法克服这个看似简单的问题.

rx.Observable
    .from([1,2,3,54,3,22,323,23,11,2])
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期顺序吐出每个数组项.

rx.Observable
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });

function getNumbers (nums) {
    return new Promise(function (resolve, reject) {
        resolve(nums);
    });
}
Run Code Online (Sandbox Code Playgroud)

虽然我只得到完整的数组(即[ 1, 2, 3, 54, 3, 22, 323, 23, 11, 2 ]).RxJS不应该破坏结果吗?我希望它至少对此有一些逻辑.

谢谢

arrays reactive-programming rxjs

10
推荐指数
1
解决办法
7598
查看次数

RxJava Observable在第一次发射时得到通知

我有三个Observables,我和combineLastest合并:

    Observable<String> o1 = Observable.just("1");
    Observable<String> o2 = Observable.just("2");
    Observable<String> o3 = Observable.just("3");

    Observable.combineLatest(o1, o2, o3, new Func3<String, String, String, Object>() {
        @Override
        public Object call(String s, String s2, String s3) {
            return null;
        }
    });
Run Code Online (Sandbox Code Playgroud)

我想通知其中一个Observable的第一次发射而不忽略后面的发射,我想第一个操作员会这样做.是否有一个方便的操作员(例如):

    o1.doOnFirst(new Func1<String, Void>() {
        @Override
        public Void call(String s) {
            return null;
        }
    })
Run Code Online (Sandbox Code Playgroud)

java reactive-programming rx-java

10
推荐指数
3
解决办法
2576
查看次数

Reactive和Reactive Streams有什么区别?

我试图理解Reactive和ReactiveStream之间的区别,特别是在RxJava的上下文中?

我能想到的最多的是Reactive Streams在规范中有一些背压概念,但RxJava/Reactive中已存在request(n)接口.

不介意ELI5的答案.

java reactive-programming rx-java reactive-streams

10
推荐指数
1
解决办法
3558
查看次数

在Flux和Mono中compose()与transform()vs. as()vs. map()

最近,我决定尝试使用projectreactor.io的春天5 (io.projectreactor:reactor-test:jar:3.1.1).

有谁知道使用这个功能的最佳情况是什么?使用它们以及应该在哪里使用它们有什么缺点和优点?

好的例子会有所帮助.

reactive-programming project-reactor reactive-streams

10
推荐指数
2
解决办法
5485
查看次数