将数据添加到ConnectableObservable

时间:2017-04-11 10:43:14

标签: asynchronous rxjs observable rxjs5

如何将数据放入ConnectableObservable?我问这个问题是在异步函数完成之前,observable的数据不可用的情况。一个简单的例子:

function myFunc() {
  let observable = Rx.Observable.create().publish();
  setTimeout(() => console.info('TIMEOUT') || observable.of('data').connect(), 300);
  return observable;
}

myFunc().subscribe(x => console.log(x));

我也试过

observable.map(() => 'data').connect()
observable.flatMap(() => Observable.of('data')).connect()

在我的例子中替代.of()但没有成功。

1 个答案:

答案 0 :(得分:1)

Observables没有connect()方法。唯一的例外是ConnectableObservable运算符返回的publish()

您可以执行以下操作:

let source = Observable.create(observer => {
    const timer = setTimeout(() => observer.next('data'), 300);

    return () => {
        clearTimeout(timer);
    };
}).publish();

source.connect();
source.subscribe(console.log);

编辑:

let observable = Rx.Observable.create(...)
  .publish();

let o1 = observable
  .map(val => true)
  .flatMap(...)
  .subscribe(...);

observable.connect();

......或......

let observable = Rx.Observable.create(...);
let o1 = observable
  .map(val => true)
  .flatMap(...)
  .publish();

o1.subscribe(...);
o1.connect();