【问题标题】:Understanding Observable: not updating subscriber for an array了解 Observable:不更新数组的订阅者
【发布时间】:2017-06-27 03:06:19
【问题描述】:

我正试图围绕 observables。我知道当观察者中的值发生变化时,可观察者会通知其所有订阅者某些事情发生了变化。我不确定为什么下面的代码不起作用。我的理解是,一旦我在数组中添加另一个元素,订阅者应该记录新值或者可能记录所有值。

谁能解释一下这是为什么?

import { Observable } from 'rxjs';

var numbers = [5, 1, 2, 7, 10];
// let source = Observable.from(numbers);
let source = Observable.create(observer => {
    for (let n of numbers)
        observer.next(n);

    observer.complete();

});

source.subscribe(
    value => console.log(`value is ${value}`),
    error => console.log(`error is ${error}`),
    () => console.log(`completed!`)
);

setTimeout(function () {
    console.log("pushing new value");
    numbers.push(33);
}, 3000);

我尝试评论observer.complete(),因为我认为这可能是罪魁祸首。

【问题讨论】:

    标签: javascript typescript observable reactive-programming


    【解决方案1】:

    observable from 运算符(类似于您创建的 observable)不会“监听”数组的 onPush 事件(默认实现中没有数组)。您将从流中获得的值将是 subscribe 调用之前数组中的值。 observable 本身只是一个函数,它只会“复制”这些值并一个一个地发出它们,您的数组不知道如何将值“推送”到流中。在反应式世界中,一切都是流,您将存储在数组中的大多数值都存储在这些值的流中。

    【讨论】:

    • 所以你的意思是说我们不能将数组复制为流?我们将不得不使用 Subject 而不是 Observable?
    • 您可以从数组复制值流,但是数组无法将值推送到现有的 observable。 Observable 通过调用 next 函数发出新值。您可以将您的数组“发送”到主题下一个函数,并且其所有订阅者/操作员都将这些值推送到流中
    猜你喜欢
    • 2018-09-08
    • 2020-08-10
    • 1970-01-01
    • 2016-02-02
    • 2017-11-18
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多