Node.js Flux vs Observables
Après avoir appris Observables, je les trouve tout à fait semblable à Node.js flux. Les deux ont un mécanisme d'informer le consommateur, chaque fois que de nouvelles données arrivent, une erreur se produit ou qu'il n'y a pas plus de données (EOF).
J'aimerais apprendre sur le concept et les différences fonctionnelles entre les deux. Merci!
- Je me demande pourquoi vous avez balisé ce avec rxjs et du bacon? L'OP semble renvoyer à des observables à partir de ecmascript harmonie
- une connaissance préalable de l'OP et de la question. Fondamentalement.
- Lol bravo sur les upvotes, mais je n'ai aucune idée de pourquoi cette question n'est pas fermé. Comment est-ce une vraie question / adapté pour DONC.
- comment est-ce pas une question appropriée de SORTE? Ce n'est pas un ", qui est votre favori" question; il est demandé pour les différences entre les deux couramment utilisés modes réactifs en JS/Nœud.
Vous devez vous connecter pour publier un commentaire.
Les deux Observables et node.js's Flux de vous permettre de résoudre le même problème sous-jacent: processus asynchrone d'une séquence de valeurs. La principale différence entre les deux, je crois, est liée au contexte qui a motivé son apparence. Ce contexte se reflète dans la terminologie et de l'API.
Sur le Observables côté, vous avez une extension à EcmaScript qui introduit les réactifs modèle de programmation. Il tente de combler le fossé entre la valeur de la génération et de l'asynchronicité avec le minimaliste et composable concepts de
Observer
etObservable
.Sur node.js et Flux côté vous avez voulu créer une interface pour l'asynchrone et performant de traitement de flux de réseau et les fichiers locaux. La terminologie en découle contexte initial et vous obtenez
pipe
,chunk
,encoding
,flush
,Duplex
,Buffer
, etc. En ayant une approche pragmatique qui fournit un soutien explicite de l'utilisation particulière des cas, vous perdez la capacité de composer des choses parce que ce n'est pas aussi uniforme. Par exemple, vous utilisezpush
sur unReadable
flux etwrite
sur unWritable
bien que, sur le plan conceptuel, que vous faites la même chose: la publication d'une valeur.Donc, dans la pratique, si vous regardez les concepts, et si vous utilisez l'option
{ objectMode: true }
, vous pouvez faire correspondreObservable
avec leReadable
flux etObserver
avec leWritable
flux. Vous pouvez même créer de simples adaptateurs entre les deux modèles.Vous avez peut-être remarqué que j'ai changé quelques noms et utilisé le plus simple des concepts de
Observer
etSubscription
, présenté ici, pour éviter la surcharge de responsabilités fait par Observables dansGenerator
. Fondamentalement, laSubscription
vous permet de vous désabonner à partir de laObservable
. De toute façon, avec le code ci-dessus, vous pouvez avoir unpipe
.Comparé avec
process.stdin.pipe(process.stdout)
, ce que vous avez est un moyen de combiner, de filtre et de transformer les flux qui fonctionne également pour toute autre séquence de données. Vous pouvez la réaliser avecReadable
,Transform
, etWritable
flux mais l'API faveurs de sous-classement au lieu d'enchaînerReadable
s et de l'application de fonctions. Sur leObservable
modèle, Par exemple, la transformation des valeurs correspond à l'application d'un transformateur fonction du flux. Il ne nécessite pas un nouveau sous-type deTransform
.La conclusion? Il est facile d'introduire le modèle réactif et le
Observable
concept n'importe où. Il est plus difficile de mettre en œuvre une bibliothèque entière autour de ce concept. Toutes ces petites fonctions doivent travailler ensemble de manière cohérente. Après tout, la ReactiveX projet est toujours en cours à elle. Mais si vous avez vraiment besoin d'envoyer le contenu du fichier pour le client, de traiter avec le codage, et la fermeture-éclair puis le support, c'est là, dans NodeJS, et ça marche plutôt bien.read()
méthode pour lire le flux sur la demande. Et ledrain event
peut être le signal que l'écriture des cours d'eau peut recevoir plus de données.