Ich meine, wenn es einen Weg gibt, auf dem ein Objekt sein Versprechen über Zustandsänderungen mitteilt, kann jeder Callbacks auslösen, die auf die gleiche Weise an Versprechen geknüpft sind. Ich vermute, dass mir etwas in meinen Überlegungen fehlt, aber ich kann nicht genau herausfinden, was genau ist.Wie zeigt das Objekt seine Zusage, dass es gelöst wurde?
Antwort
Das Versprechen, dass jQuery Deferred
zurückgibt, hat keinen Zugriff auf den Auflösungsmechanismus; Der Auflösungsmechanismus in Deferred
hat Zugriff auf das Versprechen und/oder seine registrierten Rückrufe.
Bedenken Sie:
// A D object is a bit like a Deferred
function D() {
// All of these vars are private
var state = "pending";
var resolvedValue = null;
var callbacks = [];
// This is our promise, which is private
var p = {
then: function(callback) {
callbacks.push(callback);
}
};
// Accessor for our promise
this.promise = function() {
return p;
};
// Resolver -- note the promise object doesn't
// offer any access to this, just the D
this.resolve = function(value) {
if (state === "pending") {
state = "resolved";
resolvedValue = value;
// Note that the resolver has access to the callbacks
// that the promise registers
setTimeout(function() {
callbacks.forEach(function(callback) {
try {
callback(resolvedValue);
} catch (e) {
}
});
}, 0);
}
};
}
// Usage
var d = new D();
d.promise().then(function(value) {
console.log("Got " + value);
});
d.resolve("foo");
Die nicht ist gemeint, jede Art von realer latenter Implementierung sein, es ist nur zu zeigen, gemeint, wie die das Versprechen ohne das Versprechen Zugang latenten kann in der Lage sein, das Zurückgestellte aufzulösen.
Sie können die vollständigen Details von jQuery Deferred
in the source anzeigen. Aber beachte, dass jQuerys Deferred
ein bisschen veraltet ist; Heutzutage ist es nicht mehr in Mode, zwei getrennte Objekte mit Namen zu haben (Deferred
vs. Promise
). Stattdessen akzeptiert das JavaScript-Objekt Promise
eine Initialisierungsfunktion, und die Initialisierungsfunktion empfängt eine Resolver-Funktion, die zum Auflösen des Versprechens verwendet werden kann.
Es gibt noch zwei beteiligten Objekte: Das Versprechen und der Ausführungskontext durch den Aufruf den initializer erstellt, aber das ist etwas technisch zu werden ...
- 1. Ansicht nicht update in angularjs nach einer Zusage ist gelöst
- 2. Dynamische Objekt zeigt nicht seine Methoden
- 3. Zweig konvertieren eine Zeichenfolge in das Objekt, dass es
- 4. RxJS warten bis das Versprechen gelöst
- 5. Wie warte ich darauf, dass ein Versprechen gelöst wird?
- 6. Serielle Ausführung der Zusage
- 7. Test, ob das Objekt richtig erstellt wurde
- 8. Wie kann man feststellen, wann das AudioTrack-Objekt wiedergegeben wurde?
- 9. Überprüfen, ob das Realm-Objekt gelöscht wurde
- 10. ngNicht aktualisieren, wenn das Objekt entfernt wurde
- 11. Löscht myVector.erase (myPtr) das Objekt, auf das myPtr zeigt?
- 12. Wie angular.js erkennen, dass das Modell geändert wurde
- 13. UIButton, das seine UIView ändert
- 14. Wie Nullobjektreferenz gelöst wird
- 15. Snackbar verhindert, dass Recyclerview seine Ansicht aktualisiert?
- 16. Es wurde erwartet, dass das Modul das Assemblymanifest enthält (hr = 0x80131018)
- 17. Weniger zeigt mir nicht seine Fehler
- 18. Hat das ResultSet-Objekt keine Daten, wenn es dem Map-Objekt hinzugefügt wurde?
- 19. Wie überprüft man, ob ein Angular $ q Versprechen gelöst wird
- 20. Die Ansicht wird aktualisiert, nachdem das Versprechen vom Dienst gelöst wurde.
- 21. AngularJS/Karma - Testfunktion gibt Versprechen zurück, das gelöst oder abgelehnt wurde
- 22. Warum zeigt dieser UIButton nicht seine Beschriftung?
- 23. Wie kann ich erkennen, dass das MediaPlayer-Objekt abgespielt wird?
- 24. Gibt es ein vordefiniertes Ereignis, um zu markieren, dass ein Objekt ungültig gemacht wurde?
- 25. Die Funktion wird aufgerufen, nachdem das Versprechen gelöst wurde, aber Jasmine den Test nicht besteht. Warum?
- 26. Wie kann das Problem gelöst werden, dass das Singleton-Sperrproblem in Azure WebJob nicht behoben werden kann?
- 27. ASP.NET AjaxControlToolkit.ComboBox zeigt nicht seine Artikel
- 28. Appointment Objekt wurde
- 29. RequireJS lädt das Modul nicht, bevor es seine Variablen verwendet
- 30. Verhindern, dass das typeahead.js-Dropdown-Menü auf "Auswählen" zeigt
Vielen Dank! Es ist genau das, wonach ich suche! – Phargelm