jQuery
jQuery Uitgestelde objecten en beloften
Zoeken…
Invoering
Basisbelofte creatie
Hier is een heel eenvoudig voorbeeld van een functie die " belooft door te gaan wanneer een bepaalde tijd verstrijkt". Het doet dat door een nieuw Deferred
object te maken, dat later wordt opgelost en de belofte van de uitgestelde terugkeer teruggeeft:
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();
}
En gebruik als volgt:
waitPromise(2000).then(function(){
console.log("I have waited long enough");
});
Asynchrone beloftes Chaining
Als u meerdere asynchrone taken hebt die achter elkaar moeten worden uitgevoerd, moet u hun belofteobjecten aan elkaar koppelen. Hier is een eenvoudig voorbeeld:
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 () succes, fout VS .done (), .fail ()
success and Error: een succes- callback die wordt opgeroepen na succesvolle afronding van een Ajax-aanvraag.
Een mislukte callback die wordt opgeroepen voor het geval er een fout optreedt tijdens het indienen van het verzoek.
Voorbeeld:
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json',
success: function (data) { successFunction(data); },
error: function (jqXHR, textStatus, errorThrown) { errorFunction(); }
});
.done () en .fail ():
.ajax (). done (functie (data, textStatus, jqXHR) {}); Vervangt methode .success () die in jQuery 1.8 is verouderd. Dit is een alternatieve constructie voor de succesvolle callback-functie hierboven.
.ajax (). fail (functie (jqXHR, textStatus, errorThrown) {}); Vervangt methode .error () die in jQuery 1.8 is verouderd. Dit is een alternatieve constructie voor de volledige callback-functie hierboven.
Voorbeeld:
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json'
})
.done(function (data) { successFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { serrorFunction(); });
Ontvang de huidige status van een belofte
Standaard is de status van een belofte in behandeling wanneer deze wordt gemaakt. De status van een belofte wordt gewijzigd wanneer het uitgestelde object dat de belofte heeft gemaakt deze oplost / afwijst.
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"