流与可观察对象

Streams vs Observables

提问人:Vijaiendran 提问时间:11/18/2017 最后编辑:doubleOrtVijaiendran 更新时间:12/9/2018 访问量:258

问:

在这里问这可能是一个愚蠢的问题。

我只是想知道 JavaScript(或任何其他语言)中的 Streams 和 Observables 之间的区别。我知道它们都是推送数据模型,即在接收数据时做出响应,而不是拉取数据。如果有人能提供这两者之间的更多差异,那就太好了。

JavaScript 与语言无关 的可观察对象

评论


答:

3赞 Alexei Kaigorodov 12/9/2018 #1

流通常是基于拉取的。在下面的示例中,(管道中的最后一个方法)启动管道执行并从源列表中提取数据。foreach()

    List<Integer> lst = Arrays.asList(1,2,3);
    lst.stream()
            .filter(k -> k > 1)
            .forEach(k->
                    System.out.println(k)
            );

另一方面,s(和 s)是基于推送的。他们自己开始执行并将信息推送给订阅者。因此,订阅者必须实现一些接口,该接口包含接受下一个值的适当方法。通常,此方法被命名为“update”、“onNext”、“post”、“send”等。ObservablePublisher

当发布者(生产者)的工作速度比订阅者(消费者)快时,基于推送的方法可能会导致麻烦。在这种情况下,可以提供帮助,其中消费者可以控制生产者的速度,从而将转移策略更改为基于拉动的策略。reactive streams