Ich habe diesen JavaScript-Code unten aus einer Bibliothek gezupft und verwendet jQuerys Deferred/Versprechungen, die nicht mit der offiziellen Promise-Spezifikation übereinstimmen.Konvertieren eines verzögerten jQuery-Versprechens in ein systemeigenes JavaScript-Versprechen?
Ich würde jede Hilfe bei der einfachen Konvertierung dieses Basisbeispiels in ein natives JavaScript-Versprechen unter Beibehaltung desselben Formats/derselben Struktur zu schätzen wissen.
Fast jedes Beispiel Promise Verwendung finde ich online ist etwas Asynchron zu laden und ich habe einige Fälle, wo ich sie für andere Aufgaben verwenden möchte und dieses Beispiel tut genau das!
App.show()
heißtApp.show()
eine Funktion aufruft, die einePromise
App.Animations.swipe.apply(this, [current, next, dir]).then(finalize);
- Das Versprechen Funktion gibt hat eine Event-Handler-Funktion darin, die ausgeführt wird, wenn eine CSS-Animation abgeschlossen ist und dass löst das Versprechen zu lösen.
- Wenn das Versprechen löst es dann die
finalize
Funktion, die innerhalb derApp.show()
Funktion ist.
Es könnte einfacher sein, zu folgen, was es tut, indem Sie einfach auf das Beispiel unten suchen ....
var App = {
show: function(index, direction) {
var $this = this;
// called after Promise is resolved with .then(finalize)
finalize = function() {
// other code here ran now after promise resolved from App.Animations.swipe()....
};
// call function which returns a Promise
Animations.swipe.apply(this, [current, next, dir]).then(finalize);
},
Animations = {
'none': function() {
var d = UI.$.Deferred();
d.resolve();
return d.promise();
},
// function returns a Promise which has an event handler inside it that resolves the promise
'swipe': function(current, next, dir) {
var d = UI.$.Deferred();
next.css('animation-duration', this.options.duration + 'ms');
// Event handler ran one time when CSS Animation ends and triggers the event
// this event is what resolves the promise
next.css('opacity', 1).one(UI.support.animation.end, function() {
current.removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out');
next.css('opacity', '').removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in');
d.resolve();
}.bind(this));
// return a Promise Object when this function is called
return d.promise();
},
}
};
auf diesem Code So basiert wie kann es nicht verwenden jQuerys umgewandelt werden Zurückgestellt und verwenden Native JS Promises?
Was für Sie fragen, hier wird nicht empfohlen zurückkehren kann. Native Promises assimilieren jQuery-Versprechungen, aber jQuery-Versprechungen werden native Promises nicht assimilieren. Daher sollten in einer jQuery-Umgebung Low-Level-Promistifikationen wie '.swipe()' ein jQuery-Versprechen zurückgeben, um sicherzustellen, dass es von einer jQuery-Versprechungskette oder 'jQuery.when()' höher im Call-Stack assimiliert wird. Sie werden mit der Rückgabe einer nativen Versprechung fortfahren, solange '.show()' (wie aktuell geschrieben) der einzige Aufrufer ist. Wenn Sie jedoch '.swipe()' an anderer Stelle aufrufen, könnten Sie * in Schwierigkeiten geraten. –