Suche…


Einführung

jQuery-Versprechen sind eine clevere Art, asynchrone Vorgänge auf Bausteinweise miteinander zu verketten. Dies ersetzt das Verschachteln von Rückrufen aus der alten Schule, die nicht so einfach zu reorganisieren sind.

Grundversprechen schaffen

Hier ist ein sehr einfaches Beispiel für eine Funktion, die " verspricht, nach Ablauf einer bestimmten Zeit fortzufahren". Dies geschieht durch Erstellen eines neuen Deferred Objekts, das später aufgelöst wird und das Versprechen des Deferred Objekts zurückgibt:

function waitPromise(milliseconds){

   // Create a new Deferred object using the jQuery static method
   var def = $.Deferred();

   // Do some asynchronous work - in this case a simple timer 
   setTimeout(function(){

       // Work completed... resolve the deferred, so it's promise will proceed
       def.resolve();
   }, milliseconds);

   // Immediately return a "promise to proceed when the wait time ends"
   return def.promise();
}

Und wie folgt verwenden:

waitPromise(2000).then(function(){
     console.log("I have waited long enough");
});

Asynchrone Versprechen Verkettung

Wenn Sie mehrere asynchrone Tasks haben, die nacheinander ausgeführt werden müssen, müssen Sie ihre Versprechungsobjekte miteinander verketten. Hier ist ein einfaches Beispiel:

function First() {
    console.log("Calling Function First");
    return $.get("/ajax/GetFunction/First");
}

function Second() {
    console.log("Calling Function Second");
    return $.get("/ajax/GetFunction/Second");
}
 
function Third() {
    console.log("Calling Function Third");
    return $.get("/ajax/GetFunction/Third");
}

function log(results){
    console.log("Result from previous AJAX call: " + results.data);
}
 
First().done(log)
       .then(Second).done(log)
       .then(Third).done(log);

jQuery ajax () Erfolg, Fehler VS .done (), .fail ()

Erfolg und Fehler: Ein erfolgreicher Rückruf, der nach erfolgreichem Abschluss einer Ajax-Anforderung aufgerufen wird.

Ein Fehler- Callback, der aufgerufen wird, falls während der Anforderung ein Fehler auftritt.

Beispiel:

 $.ajax({
        url: 'URL',
        type: 'POST',
        data: yourData,
        datatype: 'json',
        success: function (data) { successFunction(data); },
        error: function (jqXHR, textStatus, errorThrown) { errorFunction(); }
    });

.done () und .fail ():

.ajax (). done (Funktion (Daten, TextStatus, JqXHR) {}); Ersetzt die in jQuery 1.8 veraltete Methode .success (). Dies ist ein alternatives Konstrukt für die oben beschriebene Erfolgsrückruffunktion.

.ajax (). fail (Funktion (jqXHR, textStatus, errorThrown) {}); Ersetzt die in jQuery 1.8 veraltete Methode .error (). Dies ist ein alternatives Konstrukt für die vollständige Callback-Funktion oben.

Beispiel:

$.ajax({
    url: 'URL',
    type: 'POST',
    data: yourData,
    datatype: 'json'
})
.done(function (data) { successFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { serrorFunction(); });

Holen Sie sich den aktuellen Stand eines Versprechens

Standardmäßig steht der Status eines Versprechens bei der Erstellung aus. Der Status eines Versprechens wird geändert, wenn das zurückgestellte Objekt, das das Versprechen erstellt hat, es entweder löst oder ablehnt.

var deferred = new $.Deferred();
var d1= deferred.promise({
    prop: "value"
});
var d2= $("div").promise();
var d3= $("div").hide(1000).promise();

console.log(d1.state()); // "pending"
console.log(d2.state()); // "resolved"
console.log(d3.state()); // "pending"


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow