Was ist * wie * ein Versprechen, kann es aber mehrfach lösen?

Ich suche nach einem Pub / Sub-Mechanismus, der sich wie ein Versprechen verhält, aber mehrere Male aufgelöst werden kann und sich wie ein Ereignis verhält, es sei denn, Sie abonnieren, nachdem eine Benachrichtigung erfolgt ist, wird sie mit dem neuesten Wert ausgelöst.

Ich bin mir bewusst, dassnotify, aberdeferred.notify ist auftragssensitiv und verhält sich auf diese Weise wie ein Ereignis. z.B

d.notify('notify before'); // Not observed :(
d.promise.progress(function(data){ console.log(data) });
d.notify('notify after');  // Observed
setTimeout(function(){ d.notify('notify much later') }, 100); // Also Observed

Geige:http: //jsfiddle.net/foLhag3b

Das von mir gewünschte Benachrichtigungssystem eignet sich gut für eine UI-Komponente, die aktualisiert werden soll, um den Status der dahinter stehenden Daten widerzuspiegeln. In diesen Fällen möchten Sie sich nicht darum kümmern, ob die Daten bereits eingegangen sind oder nicht, und Sie möchten Aktualisierungen, wenn sie eingehen.

Möglicherweise ist dies ähnlich wieUIs im Sofortmodus, ist aber unterschiedlich, weil es nachrichtenbasiert ist.

Der Stand der Technik für nachrichtenbasierte Benutzeroberflächenaktualisierungen verwendet meines Wissens ein Versprechen oder einen Rückruf zum Initialisieren und bindet dann auch ein Aktualisierungsereignis:

myUIComponent.gotData(model.data);
model.onUpdate(myUIComponent.gotData); // doing two things is 2x teh workz :(

Ich möchte nicht beides tun müssen. Ich denke nicht, dass irgendjemand das tun sollte, der Anwendungsfall ist häufig genug, um zu abstrahieren.

model.whenever(myUIComponent.gotData); // yay one intention === one line of code

Ich könnte einen Mechanismus bauen, um das zu tun, was ich will, aber ich wollte sehen, ob ein Pub / Sub-Mechanismus wie dieser bereits existiert. Viele clevere Leute haben viel in CS gemacht und ich denke, dieses Konzept muss existieren. Ich suche nur nach dem Namen.

Um es klar zu sagen, ich möchte nicht das gesamte Framework ändern, z. B. Angular oder React. Ich suche nur einen Pub / Sub-Mechanismus. Vorzugsweise eine Implementierung eines bekannten Konzepts mit einem pfiffigen Namen wienotifr oderlemme-kno odertouch-base.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage