2015-09-14 12 views
5

Ogni volta che si chiama .subscribe() su un Observable, l'elaborazione su ciascun valore viene riavviata (nell'esempio seguente, la funzione mappa verrà chiamata due volte per ciascun valore).Perché le operazioni osservabili vengono chiamate una volta (duplicate) per ogni utente?

var rx = require('rx-lite'); 
var _ = require('lodash'); 

var obs = rx.Observable.fromArray([1, 2]); 

var processing = obs.map(function (number) { 
    // This function is called twice 
    console.log('call for ' + number); 
    return number + 1; 
}); 

processing.subscribe(_.noop, _.noop); 
processing.subscribe(_.noop, _.noop); 

C'è un modo per iscriversi fornire il valore elaborato senza rieseguire le funzioni di elaborazione complete?

risposta

4

Ciao @Simon Boudrias Si dovrebbe sapere su Cold vs. Hot Observables.

Le osservazioni osservabili a freddo iniziano a funzionare al momento della sottoscrizione, ovvero la sequenza osservabile inizia a inviare valori agli osservatori solo quando viene chiamato l'abbonamento. I valori non sono condivisi tra gli abbonati ..

Nel tuo caso è possibile utilizzare publish con connect o refCount

var rx = require('rx-lite'); 
var _ = require('lodash'); 

var obs = rx.Observable.fromArray([1, 2]); 

var processing = obs.map(function (number) { 
    // This function is called twice 
    console.log('call for ' + number); 
    return number + 1; 
}).publish(); 

processing.subscribe(_.noop, _.noop); 
processing.subscribe(_.noop, _.noop); 

processing.connect();