如何在角度4中跨订阅者制作可观察的份额?

时间:2017-09-17 19:19:00

标签: angular typescript rxjs observable

考虑以下代码

getObservable() {
    return this.http.get('get_something').map(
        data => {
            return true;
        },
        err => {
            return false;
        }
    );
}

subscriber_1 = this.getObservable().subscribe(
    data => {
        console.log("from subscriber 1", data);
    }
);

subscriber_2 = this.getObservable().subscribe(
    data => {
        console.log("from subsriber 2", data);
    }
);

for (var _i = 0; _i < 100; _i++) {
    this.getObservable()
}

我希望from subscriber 1from subsriber 2能够打印100次。但是只打印1时间。

我认为observable是向量而不是标量,所以无论何时调用相同的observable都会调用所有订阅者?

我一定是做错了。

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

以下是您的工作:

  1. 您创建一个创建请求并返回一些值的函数。
  2. 第一个订阅者subscriber_1正在发出请求,当您调用订阅函数时,只等待当前请求才能收到响应。
  3. 当您进行循环时,您只是在提出请求。您没有做任何事情来处理对这些请求的响应。
  4. 据我所知,您希望使用RxJS中的Subject

    let subject: Subject<any> = new Subject<any>();
    
    // Anytime the subject value is changed a notification is triggered 
    // The subscribe function is handling it 
    let subscriber_1 = subject.AsObservable().subcribe((data) => {
      console.log(data);
      return data;
    })
    
    // Trigger a notification 100 times
    for(let i = 0; i < 100; i++) {
       subject.next(i);
    }
    

    以下是一篇很好的文章,您可以在其中详细了解Subject课程https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93

    或者

    如果您不想使用RxJS,则必须实现可观察的模式。

    http://www.dofactory.com/javascript/observer-design-pattern以下是一个很好的解释。