Rxjs-只有第一个观察者才能看到observatory.share()中的数据



我有一些代码片段如下

var videosNeedFix = Rx.Observable.fromArray(JSON.parse(fs.readFileSync("videoEntries.json"))).share();
videosNeedFix.count().subscribe(function(count){ //subscrption A
  console.log(count + " in total"); 
});

videosNeedFix.subscribe(function(videoEntry){ //subscription B
  console.log(videoEntry.id, videoEntry.name, videoEntry.customFields); 
});

videoEntries.json是videoEntry对象的json序列化数组。我希望订阅A和订阅B都能接收到videosNeedFix observable发出的数据。

但是,根据控制台日志,只有订阅A会接收数据,而不是订阅B。如果我交换两个订阅的顺序,只有subscriptionB会看到数据。为什么observable只向第一个订阅发送数据?

这是Rx.Subject 的一个很好的用例(可能是唯一的用例-请参阅使用主题还是不使用主题?)

请考虑以下示例。这段代码(评论中提到了.delay()破解)会起作用,但对我来说似乎有点黑客:

  let stream$ = Rx.Observable
        .return(updatesObj)
        .map(obj => Object.assign({}, obj.localData, obj.updates))
        .delay(1) //Hacky way of making it work
        .share()
    stream$
        .flatMap(obj => Observable.fromPromise(AsyncStorage.setItem('items', JSON.stringify(obj))))
        .catch(Observable.return(false))
        .subscribe()
      stream$
        .subscribe(obj =>  dispatch(dataIsReady(obj)))

处方受试者示例:

  let subjS = new Rx.Subject()
  let stream$ = subjS
    .map(obj => Object.assign({}, obj.localData, obj.updates))
    .share()
  stream$
    .flatMap(obj => Observable.fromPromise(AsyncStorage.setItem('items', JSON.stringify(obj))))
    .catch(Observable.return(false))
    .subscribe()
  stream$
    .subscribe(obj =>  dispatch(dataIsReady(obj)))
  subjS.onNext(updatesObj)

最新更新