如何解决当您无法控制发布者时,是否可以/建议使用响应式编程 简单的回答较长答案
我对使用 ReactiveX 库进行响应式编程非常陌生,即便如此,我也已经开始欣赏其流畅的 API 和避免一类并发错误的编程风格。
因此,我想在工作中使用 ReactiveX(特别是 RxJava 和 RxJS),我正在开发一个应用程序,该应用程序基本上从服务器接收更新“流”并将其显示给用户(经过一些操作)。在我看来,就反应流命名法而言,我的应用程序是一个“订阅者”,它订阅发布者以接收感兴趣的值。
我有一些疑虑,这使我无法在工作中使用 RxJava:
-
在我的案例中,“发布者”是我无法控制或维护的另一项服务(不使用 RxJava 等),因此,我无法更改其代码来实现“发布者”接口。因此,我是否有可能(或者至少不是不习惯)使用 RxJava?如果是这样,我是否必须创建一个包装器来实现一个发布者,该发布者从其他服务中获取值并发出它?
解决方法
简单的回答
不应该是一个问题。反应式编程是不是在网络的层面关注的数据格式或出版商。这是完全可能的只是功能的一小位是反应性,而完全不影响你的代码的其余部分。
JavaScript和Java既让你以最小的忙乱反应性和势在必行样式之间切换。
就像不要紧什么语言的服务器或客户端,只要他们可以读取和发送形成良好的信息运行。反应库通常是完全自包含的。
较长答案
从客户的角度来看,你的服务器是做可以在许多方面被抽象。什么是最简单/最好有很多更比服务器的网络库做。的角度的应用(例如)可使用角的HttpClient的治疗任何和所有网络流量作为流。不要紧,什么服务器是干什么的,也不是如何发送数据包。角可以把它们作为流。
即使它不是内置的,在现有的任何其他东西之上分层反应库应该相对容易。
受试者是构建块,让你的反应性/功能的样式和迫切的编程风格之间无缝地切换。
但是您目前能够获得的数据,则可以创建对象,并使用其.next
该数据传递到流。
public payloadData: Subject;
function processData(payload){
this.payloadData.next(payload);
}
然后,你对你的方式。你可以建立从那里出来的反应框架。
/***
* An observable,that (once subscribed) begins to keep a timestamped array of all
* values emitted by payloadData.
*
* TODO: Remove stale data and write it to disk.
***/
function accumulateDataHistory(): Observable {
return this.payloadData.pipe(
timestamp(),scan((acc,curr) => ([...acc,curr]),[]),shareReplay(1)
)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。