Sök…


Introduktion

jQuery-löften är ett smart sätt att kedja ihop asynkrona operationer på ett byggsten. Detta ersätter den gamla skolan som häckar återuppringningar, som inte är så lätt omorganiserade.

Grundläggande löfte skapande

Här är ett mycket enkelt exempel på en funktion som " lovar att fortsätta när en given tid förflutit". Det gör det genom att skapa ett nytt Deferred objekt, som löses senare och återlämna det uppskjutna löfte:

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();
}

Och använd så här:

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

Asynkrona löften kedja

Om du har flera asynkrona uppgifter som måste ske efter varandra måste du kedja ihop sina löfteobjekt. Här är ett enkelt exempel:

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 () framgång, fel VS. gjort (), .fail ()

framgång och fel: en framgångssuppringning som åberopas när en Ajax-begäran har slutförts.

Ett misslyckande återuppringning som åberopas om det finns något fel vid begäran.

Exempel:

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

. gjort () och .fail ():

.ajax (). gjort (funktion (data, textStatus, jqXHR) {}); Ersätter metod. Succé () som avskrivs i jQuery 1.8.Detta är en alternativ konstruktion för framgångssignalens återuppringningsfunktion ovan.

.ajax (). fail (funktion (jqXHR, textStatus, errorThrown) {}); Ersätter metod .error () som avskrivs i jQuery 1.8.Detta är en alternativ konstruktion för den kompletta återuppringningsfunktionen ovan.

Exempel:

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

Få det aktuella tillståndet av ett löfte

Som standard väntar ett löfte på när det skapas. Löftets tillstånd ändras när det uppskjutna objektet som skapade löfte antingen löser / avvisar det.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow