标签: reactive-programming

使用rxjs5获取BehaviorSubject的当前值的简单方法

以前在rxjs4中,BehaviorSubject中有一个名为: getValue()(doc here)的方法.

rxjs5中不再存在此方法.

所以我发现获得BehaviorSubject值的唯一解决方案是:

let value;
myBehaviorSubject.take(1).subscribe( (e) => value = e );
Run Code Online (Sandbox Code Playgroud)

这段代码同步运行(我不完全理解为什么,但确实......)并获得了价值.它有效,但它不像getValue()现有的那样干净:

let value = myBehaviorSubject.getValue();
Run Code Online (Sandbox Code Playgroud)

为什么getValue()rxjs5中删除了这个问题最干净的解决方案是什么?

javascript reactive-programming rxjs behaviorsubject rxjs5

31
推荐指数
2
解决办法
2万
查看次数

WebClient与RestTemplate

按照春季5:

WebClient是表示执行Web请求的主要入口点的接口.

它已作为Spring Web Reactive模块的一部分创建,并将在这些场景中替换经典的RestTemplate.新客户端是一种通过HTTP/1.1协议工作的反应式非阻塞解决方案

这是否意味着,如果我们想要升级到Spring 5,我们需要使用RestTemplate重新编码旧应用程序?

或者在Spring 5中使用RestTemplate有一些解决方法?

spring reactive-programming web-client resttemplate

31
推荐指数
5
解决办法
2万
查看次数

什么是LINQ to events(即RX Framework)?

什么是LINQ to events又名RX Framework又名.NET 4.0中的Reactive Extensions(但也可作为backported版本提供)?

换句话说,System.Reactive.dll中的所有内容是什么?

linq events reactive-programming system.reactive

30
推荐指数
3
解决办法
6928
查看次数

Mono vs Flux in Reactive Stream

根据文件:

Flux是一个可以发出0..N元素的流:

Flux<String> fl = Flux.just("a", "b", "c");
Run Code Online (Sandbox Code Playgroud)

Mono是一个0..1元素的流:

Mono<String> mn = Mono.just("hello");
Run Code Online (Sandbox Code Playgroud)

因为两者都是反应流中Publisher接口的实现.

我们不能在大多数情况下只使用Flux,因为它也可以发出0..1,从而满足Mono的条件?

或者只有一些特定的条件,只需要使用Mono并且Flux无法处理操作?请建议.

reactive-programming project-reactor reactive-streams

30
推荐指数
3
解决办法
2万
查看次数

Reactive Extensions(Rx)+ MVVM =?

用于解释Reactive Extensions(Rx)功能的一个主要示例是将现有鼠标事件组合成一个表示鼠标拖动过程中增量的新"事件":

var mouseMoves = from mm in mainCanvas.GetMouseMove()
                 let location = mm.EventArgs.GetPosition(mainCanvas)
                 select new { location.X, location.Y};

var mouseDiffs = mouseMoves
    .Skip(1)
    .Zip(mouseMoves, (l, r) => new {X1 = l.X, Y1 = l.Y, X2 = r.X, Y2 = r.Y});

var mouseDrag = from _  in mainCanvas.GetMouseLeftButtonDown()
                from md in mouseDiffs.Until(
                    mainCanvas.GetMouseLeftButtonUp())
                select md;
Run Code Online (Sandbox Code Playgroud)

资料来源: Matthew Podwysocki的反应框架系列介绍.

在MVVM中,我通常努力使我的.xaml.cs文件尽可能为空,并且使用viewmodel中的命令从视图中连接事件的一种方法纯粹是在标记中使用一种行为:

<Button Content="Click Me">
    <Behaviors:Events.Commands>
        <Behaviors:EventCommandCollection>
            <Behaviors:EventCommand CommandName="MouseEnterCommand" EventName="MouseEnter" />
            <Behaviors:EventCommand CommandName="MouseLeaveCommand" EventName="MouseLeave" />
            <Behaviors:EventCommand CommandName="ClickCommand" EventName="Click" />
        </Behaviors:EventCommandCollection>
    </Behaviors:Events.Commands>
</Button>
Run Code Online (Sandbox Code Playgroud)

资料来源: …

mvvm reactive-programming system.reactive

29
推荐指数
3
解决办法
1万
查看次数

C#.NET Rx- System.Reactive在哪里?

我有一个密集的Java背景,所以请原谅我,如果我忽略了C#中明显的东西,但我的研究让我无处可去.我正在尝试使用反应性Rx .NET库.编译器没有抱怨,IObservable但它是对zip方法的调用.它抛出"......你错过了使用指令或汇编参考吗?"

我一直在浏览命名空间,但我找不到想要的东西.System.Reactive如果使用的话,我找不到哪个也会抛出错误,并且此Windows 8.1应用程序已包含所有引用.有人可以告诉我有什么问题吗?

public sealed class EventEngine
{    
    private static readonly EventEngine singleton = new EventEngine();

    public static EventEngine get()
    {
        return singleton;
    }

    public IObservable<MusicNote> CurrentKey { get; set; }
    public IObservable<Scale> CurrentScale { get; set; }

    public IObservable<AppliedScale> CurrentAppliedScale
    {
        get
        {
            return CurrentScale.zip(CurrentKey,
                (s, k) => AppliedScale.getAppliedScale(k, s));
        } 
    }

    private EventEngine() {}
}
Run Code Online (Sandbox Code Playgroud)

*更新*

这是考虑答案输入后的工作版本.

public sealed class EventEngine
{
    private static readonly EventEngine singleton = new EventEngine();

    public …
Run Code Online (Sandbox Code Playgroud)

.net c# reactive-programming system.reactive

29
推荐指数
2
解决办法
2万
查看次数

Java反应框架的比较

我看到许多框架/库声称他们可以帮助用Java构建反应式应用程序,例如:Akka,Vert.x,RxJava,Reactor,QBit等.

他们似乎有不同的方法,功能,优点,缺点等.我找不到详细的比较.有关于这些框架中的每一个的文档,但我不能理解这些差异.

主要Java反应框架之间有什么区别?

什么是可以推动Java反应式框架选择的应用程序需求?

感谢您的时间.

java reactive-programming akka rx-java project-reactor

29
推荐指数
1
解决办法
1万
查看次数

first()和take(1)之间的区别

我想了解细节RxJava.

直觉上我期望first()并且take(1)平等并且做同样的事情.但是通过挖掘源代码first()定义为take(1).single().

这有什么single()用?还不take(1)保证输出单个项目吗?

java reactive-programming rx-java

29
推荐指数
2
解决办法
8664
查看次数

.NET Rx优于经典事件的优势?

.NET 4.0的β2已经介绍的IObservableIObserver接口.

与传统的.NET事件相比有哪些优势?这不是解决同样的问题吗?

.net events reactive-programming system.reactive

28
推荐指数
1
解决办法
5449
查看次数

ReactiveCocoa的参考所有权语义是什么?

当我创建一个信号并将其带入函数的范围时,其每个Cocoa约定的有效保留计数为0:

RACSignal *signal = [self createSignal];
Run Code Online (Sandbox Code Playgroud)

当我订阅信号时,它会保留订阅者并返回一个一次性的,根据Cocoa约定,它也有一个保留计数为零.

RACDisposable *disposable = [signal subscribeCompleted:^ {
    doSomethingPossiblyInvolving(self);
}];
Run Code Online (Sandbox Code Playgroud)

大多数情况下,订户将关闭并引用self其ivars或封闭范围的其他部分.因此,当您订阅信号时,信号具有对订户的拥有参考,并且订户具有您自己的参考.你得到的一次性用品有一个信号的拥有参考.

disposable -> signal -> subscriber -> calling scope
Run Code Online (Sandbox Code Playgroud)

假设您持有该一次性用品,以便您可以在某个时间点取消订阅(例如,如果信号是从Web服务检索数据并且用户导航离开屏幕,则取消她查看正在检索的数据的意图).

self.disposeToCancelWebRequest = disposable;
Run Code Online (Sandbox Code Playgroud)

此时我们有一个循环参考:

calling scope -> disposable -> signal -> subscriber -> calling scope
Run Code Online (Sandbox Code Playgroud)

负责任的事情是确保在取消请求或请求完成后循环中断.

 [self.disposeToCancelWebRequest dispose]
 self.disposeToCancelWebRequest = nil;
Run Code Online (Sandbox Code Playgroud)

请注意,self在释放时不能执行此操作,因为保留周期永远不会发生这种情况!在回调用户期间,在打破保留周期方面看起来似乎有些可疑,因为信号可能在其实现仍然在调用堆栈上时被释放.

我还注意到实现保留了一个进程全局活动信号列表(截至我最初提出这个问题时).

使用RAC时如何考虑所有权?

cocoa reactive-programming reactive-cocoa

28
推荐指数
1
解决办法
4261
查看次数