J'ai un problème de consommateur de producteur spécial dans RXJS: le producteur produit lentement des éléments. Un consommateur demande des éléments et doit souvent attendre le producteur. Cela peut être réalisé en zipping le producteur et le flux de demande: Parfois, une demande est abandonnée. Un élément produit ne doit être consommé qu'après une requête non annulée: p> la première demande Comment puis-je atteindre cela dans RXJS? P> EDIT: strong>
J'ai créé un exemple avec un test Qunit sur JSBIN. Vous pouvez modifier la fonction L'exemple contient la définition de la fonction de la réponse précède acceptée . p> p> R1 code> consumerait le premier élément produit
p1 Code>, mais
R1 code> est abandonné par
A (R1) code> avant de pouvoir consommer
p1 code>.
p1 code> est produit et est consommé
c (p1, r2) code> sur la deuxième demande
r2 code>. Le deuxième abort
A (?) Code> est ignoré, car aucune demande sans réponse n'est arrivée auparavant. La troisième demande
R3 code> doit attendre sur l'élément produit suivant
p2 code> et n'est pas abandonné jusqu'à ce que
p2 code> est produit. Ainsi,
p2 code> est consommé
C (p2, r3) code> immédiatement après sa production. P>
CreateConsume (Produce, Demande, Abort) Code> Pour essayer / Tester votre solution. P>
3 Réponses :
Ceci (note de base moins les détails) passe votre test JSBIN: et le code JSBIN . p> p>
Merci pour votre solution, même si cela ne se comporte pas comme si j'aimerais. J'ai édité ma question pour être plus claire quel comportement j'aimerais avoir. Je modifie le diagramme, ajouté un descriptine et un lien à un exemple de test / Environnement sur JSBIN. J'ai utilisé votre solution dans cet exemple. Il échoue car il saute le premier élément produit en faveur du deuxième élément, qui est consommé deux fois.
Mise à jour ma réponse. Cela résoudra-t-il tous vos cas? @Megamuetzenmike
Astucieux. Je savais qu'il devait y avoir un moyen de le faire avec les opérateurs existants.
C'est essentiellement "la demande combinée à la [ABORT OU PRODUIRE" correspondante, ignorant lorsque le résultat était un abort ".
C'est tellement terres et élégant.
Entre-temps, j'ai réalisé qu'il serait beaucoup plus facile d'utiliser si des avorts sont ignorés si aucune demande sans réponse n'est arrivée auparavant.
Je ne peux pas vraiment envelopper mon cerveau sur la façon de le faire avec les opérateurs existants. Voici comment le faire avec observable.create () code>:
Belle approche. Il suffit de confirmer: appelant sub.Dispose () code> dispose tout
rx.singleasignmentDisposable code> S?
Oui ComposiSitedisposable vous permet de regrouper plusieurs jetables en un seul jetable.
Cette solution ignore les avorts qui ne suivent pas une demande sans réponse: code dans le test le plus récent sur JSBIN. P> P>
Bon problème. ici est ma tentative, mais @ Brandon's est bien meilleur.
D'ailleurs. J'ai remarqué de petits problèmes avec vos tests: 1. Vous produisez
1 code>,
2 code>, mais attendez:
p1 code>,
p2 code >; 2. Vous avez une fois échangé contre
attendu code> et
réel code>.
Je suis désolé. Je construis ce test à la hâte et a partagé l'exemple de JSBIN dans le mauvais sens. Ainsi, je l'ai accidentellement changé plus tard pendant mes propres approches. J'ai changé les éléments vers leurs valeurs d'origine: produire:
p1 code> et
p2 code>; Demande:
R1 code>,
r2 code> et
r3 code>; Abandonner:
A1 code>.