Ich habe eine Webkomponente, die einen Stream abonniert.
Da die Webkomponente jedes Mal neu erstellt wird, wenn sie angezeigt wird, muss ich den Abonnenten bereinigen und wiederholen.
Im Moment füge ich alle Abonnenten zu einer Liste hinzu und in removed()
life-cycle Methode, die ich mache:
Nun zu dem Problem: Wenn die Webkomponente nicht angezeigt wird, hört niemand den Stream. Das Problem ist, dass der Komponente Daten / Ereignisse fehlen, wenn sie nicht angezeigt werden.
Was ich brauche, ist Pufferung. Ereignisse müssen gepuffert und gleichzeitig gesendet werden, wenn ein Listener registriert wird. Gemäß der Dokumentation erfolgt die Pufferung, bis ein Listener registriert ist:
>Der Controller puffert alle eingehenden Ereignisse, bis der Abonnent registriert ist.
Das funktioniert, aber das Problem ist, dass der Listener irgendwann entfernt und erneut registriert wird, und es scheint, dass dies keine Pufferung auslöst.
>Es scheint, dass die Pufferung nur anfänglich erfolgt, nicht später, selbst wenn alle Listener weg sind.
Die Frage ist also: Wie puffern wir in dieser Situation, in der die Hörer hin und her gehen können?
Hinweis: Normalerweise sollte es Ihnen nicht möglich sein, einen Stream erneut zu abonnieren, der bereits geschlossen wurde. Dies scheint ein Fehler zu sein, den wir vergessen haben zu beheben.
Ich bin mit Web-Komponenten nicht vertraut, aber ich hoffe, dass ich Ihr Problem mit dem folgenden Vorschlag anspreche.
Eine Möglichkeit (und natürlich viele) wäre es, für jeden Abonnenten einen neuen Stream zu erstellen (wie html-events do), der den ursprünglichen Stream pausiert.
Sagen Sie origin
ist der ursprüngliche Stream. Implementiere dann einen stream
Getter, der einen neuen Stream zurückgibt, der mit origin
verknüpft ist:
Nicht getesteter Code.
%Vor%Wenn Sie Ereignisse sofort puffern müssen, müssen Sie das Abonnement sofort starten und nicht wie im Beispielcode träge.
Tags und Links dart