Deferred-objecten begrijpen
Krijg inzicht in de kernconcepten van jQuery's Deferred-objecten, hoe ze asynchrone bewerkingen voorstellen en welke statussen ze hebben (pending, resolved, rejected).
Deferred-objecten begrijpen is een gratis jQuery Academy-les op CoddyKit. Dit is les 1 van 3. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject jQuery Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus jQuery Academy bevat in totaal 3 lessen.
Asynchrone bewerkingen en callbacks
Bij webontwikkeling gebeuren veel taken niet onmiddellijk. Denk bijvoorbeeld aan het ophalen van gegevens van een server of het wachten op een klik van een gebruiker. Dit zijn asynchrone bewerkingen.
Traditioneel gebruiken we hiervoor callbacks: functies die pas worden uitgevoerd nadat een asynchrone taak is voltooid. Geneste callbacks kunnen echter leiden tot een "callback-hel", waardoor code moeilijk te lezen en te onderhouden wordt.
Maak kennis met jQuery Deferred
Daar komen de Deferred-objecten van jQuery te hulp! Een Deferred-object is een krachtige manier om asynchrone bewerkingen overzichtelijker te beheren.
Het werkt als een tijdelijke aanduiding voor een toekomstig resultaat. Je koppelt er functies aan die worden uitgevoerd wanneer de bewerking is voltooid, ongeacht of die slaagt of mislukt, zonder je hoofdcode te blokkeren.
De drie statussen van Deferred
Een Deferred-object kan zich in een van drie statussen bevinden, die de status weerspiegelen van de asynchrone taak die het vertegenwoordigt:
- In behandeling: De beginstatus. De bewerking is nog niet voltooid.
- Voltooid: De bewerking is succesvol afgerond.
- Afgewezen: De bewerking is mislukt of er is een fout opgetreden.
Zodra de status van een Deferred-object voltooid of afgewezen is, kan die niet meer veranderen.
Een Deferred-object maken
Je maakt een nieuw Deferred-object met $.Deferred(). Dit object begint in de status in behandeling.
Het biedt methoden om de status te wijzigen en callbackfuncties te registreren die worden uitgevoerd wanneer de status verandert.
Probeer er een te maken:
var myDeferred = $.Deferred();
console.log('Deferred is pending: ' + (myDeferred.state() === 'pending'));Succes signaleren: .resolve()
Wanneer je asynchrone bewerking succesvol is voltooid, roep je de methode .resolve() aan op je Deferred-object.
Hierdoor verandert de status van in behandeling naar voltooid. Alle argumenten die je aan .resolve() meegeeft, worden doorgegeven aan de callbackfuncties voor succes.
Bekijk hoe de status verandert:
var myDeferred = $.Deferred();
console.log('Initial state: ' + myDeferred.state());
setTimeout(function() {
myDeferred.resolve('Data fetched!');
console.log('New state: ' + myDeferred.state());
}, 1000);Mislukking signaleren: .reject()
Als je asynchrone bewerking mislukt, roep je de methode .reject() aan.
Hierdoor verandert de status van Deferred van in behandeling naar afgewezen. Argumenten die aan .reject() worden doorgegeven, gaan naar de callbackfuncties voor fouten, vaak als foutmeldingen.
Bekijk hoe afwijzing werkt:
var myDeferred = $.Deferred();
console.log('Initial state: ' + myDeferred.state());
setTimeout(function() {
myDeferred.reject('Network error!');
console.log('New state: ' + myDeferred.state());
}, 1000);Succes afhandelen met .done()
Om te reageren op een geslaagde bewerking, wanneer Deferred de status voltooid heeft, koppel je een callbackfunctie met de methode .done().
Deze functie wordt alleen uitgevoerd als .resolve() wordt aangeroepen en ontvangt alle argumenten die door .resolve() zijn doorgegeven.
We verwerken enkele gegevens:
var fetchData = function() {
var dfd = $.Deferred();
setTimeout(function() {
var success = true; // Simulate success
if (success) {
dfd.resolve('User data loaded.');
} else {
dfd.reject('Failed to load user data.');
}
}, 1000);
return dfd;
};
fetchData().done(function(message) {
console.log('Success handler: ' + message);
});Mislukkingen afhandelen met .fail()
Op dezelfde manier gebruik je de methode .fail() om fouten af te handelen wanneer Deferred de status afgewezen heeft.
De callbackfunctie die aan .fail() wordt doorgegeven, wordt alleen uitgevoerd als .reject() wordt aangeroepen en ontvangt de bijbehorende argumenten.
We simuleren een fout:
var fetchData = function() {
var dfd = $.Deferred();
setTimeout(function() {
var success = false; // Simulate failure
if (success) {
dfd.resolve('User data loaded.');
} else {
dfd.reject('Failed to load user data.');
}
}, 1000);
return dfd;
};
fetchData().fail(function(errorMessage) {
console.log('Error handler: ' + errorMessage);
});Altijd uitvoeren: .always()
Soms heb je code die moet worden uitgevoerd ongeacht of de asynchrone bewerking slaagt of mislukt. Daarvoor gebruik je .always().
De callbackfunctie die met .always() is gekoppeld, wordt uitgevoerd wanneer Deferred de status voltooid of afgewezen heeft.
Gebruik .always() voor opruimwerk of laatste updates van de gebruikersinterface:
var fetchData = function(shouldSucceed) {
var dfd = $.Deferred();
setTimeout(function() {
if (shouldSucceed) {
dfd.resolve('Data received!');
} else {
dfd.reject('Request failed!');
}
}, 1000);
return dfd;
};
fetchData(false)
.done(function(msg) { console.log('Success: ' + msg); })
.fail(function(err) { console.log('Failure: ' + err); })
.always(function() { console.log('Operation finished.'); });Beveiligen met .promise()
Wanneer je een Deferred-object vanuit een functie retourneert, wil je mogelijk niet dat externe code de status ervan kan wijzigen, bijvoorbeeld door rechtstreeks .resolve() of .reject() aan te roepen.
De methode .promise() retourneert een "alleen-lezenversie" van het Deferred-object. Deze versie biedt alleen methoden om callbacks te koppelen, zoals .done(), .fail() en .always(), maar geen methoden om de status te wijzigen.
var createAsyncTask = function() {
var dfd = $.Deferred();
setTimeout(function() {
dfd.resolve('Task done!');
}, 500);
// Return only the promise, not the full Deferred object
return dfd.promise();
};
var taskPromise = createAsyncTask();
taskPromise.done(function(msg) {
console.log(msg);
});
// The following would throw an error or do nothing if trying to resolve/reject a promise
// taskPromise.resolve('Attempted to resolve externally'); // This is not possible on a promise objectTest je kennis
Welke van de volgende methoden zou je gebruiken om een callback te registreren die ALLEEN wordt uitgevoerd wanneer een Deferred-object zijn asynchrone bewerking succesvol voltooit?
Samenvatting: de basis van Deferred
Goed gedaan! In deze les heb je de belangrijkste concepten van jQuery Deferred-objecten geleerd:
- Ze beheren asynchrone bewerkingen en voorkomen callback-hel.
- Ze bevinden zich in de status in behandeling, opgelost of afgewezen.
- Je gebruikt
.resolve()voor succes en.reject()voor fouten. - Je koppelt callbacks met
.done()(succes),.fail()(fout) en.always()(beide). .promise()retourneert een alleen-lezenobject om manipulatie van de status te voorkomen.
Vervolgens leer je hoe je deze krachtige objecten kunt koppelen en samenstellen!
Leer JavaScript met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 22
- Lessen
- 48
Veelgestelde vragen
Is de les “Deferred-objecten begrijpen” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad jQuery Academy, waaronder “Deferred-objecten begrijpen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus jQuery Academy bevat in totaal 3 lessen.
Wat leer ik in “Deferred-objecten begrijpen”?
Krijg inzicht in de kernconcepten van jQuery's Deferred-objecten, hoe ze asynchrone bewerkingen voorstellen en welke statussen ze hebben (pending, resolved, rejected). Je oefent met jQuery Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met jQuery Academy te beginnen?
Ervaring vooraf is niet nodig. jQuery Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 3.
Hoe lang duurt de les “Deferred-objecten begrijpen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over jQuery Academy?
Ja. Elke les over jQuery Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Deferred-objecten begrijpen
- Promises aan elkaar koppelen en samenstellen
- Meerdere asynchrone taken afhandelen