2015-08-27 10 views
7

Sto utilizzando RxJS qui e non riesco a superare questo problema semplice apparentemente.RxJS: divisione di un risultato di matrice da Observable.fromPromise

rx.Observable 
    .from([1,2,3,54,3,22,323,23,11,2]) 
    .distinct() 
    .subscribe(function next (x) { 
     console.log('Next'); 
     console.log(x); 
    }, function error (x) { 
     console.log('Error'); 
     console.log(x); 
    }, function completed() { 
     console.log('Completed'); 
    }); 

Il codice sopra riportato sputa ogni elemento dell'array in ordine come previsto.

rx.Observable 
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2])) 
    .distinct() 
    .subscribe(function next (x) { 
     console.log('Next'); 
     console.log(x); 
    }, function error (x) { 
     console.log('Error'); 
     console.log(x); 
    }, function completed() { 
     console.log('Completed'); 
    }); 

function getNumbers (nums) { 
    return new Promise(function (resolve, reject) { 
     resolve(nums); 
    }); 
} 

Qui comunque ottengo soltanto l'array completo (cioè [ 1, 2, 3, 54, 3, 22, 323, 23, 11, 2 ]). RxJS non dovrebbe rompere il risultato a parte? Spero che almeno abbia avuto una logica per questo.

Grazie

+0

In alternativa vorrei assolutamente essere disposti a svolgere una sorta di trasformare che potrebbero mutare il flusso * dopo * la promessa è risolto .. per esempio ricevere l'array completo (1 elemento nello stream) e trasformarlo in elementi array.length nel flusso. –

risposta

15

No, non rompere loro parte in modo implicito. Se si desidera dividere usarli flatMap che appiattire la matrice:

rx.Observable 
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2])) 
    .flatMap(function(x) { return x; }) 
    .distinct() 
    .subscribe(function next (x) { 
     console.log('Next'); 
     console.log(x); 
    }, function error (x) { 
     console.log('Error'); 
     console.log(x); 
    }, function completed() { 
     console.log('Completed'); 
    }); 
+0

Grazie! È esattamente quello che stavo cercando –

+2

Bello, non sapevo che 'flatMap' avrebbe appiattito un iterabile. – Brandon

+0

Wohoo, ottima risposta, risolto il mio problema, grazie mille @paulpdeniels – hhsadiq

Problemi correlati