Async/await in JavaScript
In dit artikel leggen we async/await in JavaScript uit.
YouTube Video
Async/await in JavaScript
async
(en await
) in JavaScript zijn functies ontworpen om het schrijven van asynchrone operaties intuïtiever en leesbaarder te maken. Door dit te gebruiken kun je de complexiteit van traditionele callbackfuncties en Promise
-ketens verminderen, en asynchrone code schrijven op een manier die lijkt op synchrone code.
async
Functie
async
wordt gebruikt om een functie als een asynchrone functie te definiëren. Een async
functie retourneert altijd een Promise. Binnen een functie gemarkeerd met async
kun je await
gebruiken om te wachten tot het resultaat van een Promise wordt geretourneerd.
Basis Syntax van een async
Functie
1async function myAsyncFunction() {
2 // Write asynchronous processing here
3 return 'Result'; // Return a Promise
4}
In dit geval retourneert het aanroepen van myAsyncFunction()
automatisch een Promise-object. Wanneer de Promise wordt opgelost, wordt het resultaat de waarde die door return
wordt geretourneerd.
Voorbeeld: Basis async
Functie
1async function greet() {
2 return 'Hello, World!';
3}
4
5greet().then((message) => {
6 console.log(message); // Displays "Hello, World!"
7});
await
await
wordt gebruikt om te wachten totdat een Promise wordt opgelost. Door await
te gebruiken, kun je de uitvoering pauzeren totdat de Promise is opgelost en het resultaat van de Promise ontvangen. await
kan alleen worden gebruikt binnen een async
functie.
Voorbeeld: Hoe await
te gebruiken
1async function fetchData() {
2 // Wait for the result of the Promise
3 const data = await fetch('https://codesparklab.com/json/example.json');
4 // Wait for the asynchronous operation to complete
5 const jsonData = await data.json();
6 // Retrieve and display the data
7 console.log(jsonData);
8}
9
10fetchData();
In het bovenstaande voorbeeld wacht het met await
op de Promise die door de fetch
functie wordt geretourneerd, en voert vervolgens verdere asynchrone bewerkingen uit met het resultaat.
Foutenafhandeling met async
/await
Als er een fout optreedt binnen een async
functie, wordt die fout behandeld als een reject
van de Promise. Je kunt try...catch
-instructies gebruiken om fouten af te handelen.
Voorbeeld: Foutenafhandeling
1async function fetchData() {
2 try {
3 // Invalid URL
4 const data = await fetch('https://api.invalid-url.com/data');
5 const jsonData = await data.json();
6 console.log(jsonData);
7 } catch (error) {
8 // Catch the error
9 console.error('Failed to fetch data:', error);
10 }
11}
12
13fetchData();
Het gebruik van een try...catch
-blok stelt je in staat fouten op te vangen die optreden tijdens asynchrone operaties, waardoor wordt voorkomen dat het programma crasht wanneer er fouten optreden.
Voordelen van async
/await
In vergelijking met traditionele Promise
-ketens biedt async
/await
de volgende voordelen:.
- Verbeterde leesbaarheid
- Asynchrone verwerking kan worden geschreven als synchrone code, waardoor de complexiteit van diep geneste
Promise
-ketens en callbacks wordt vermeden.
- Asynchrone verwerking kan worden geschreven als synchrone code, waardoor de complexiteit van diep geneste
- Eenvoudiger debuggen
- Omdat het lijkt op synchrone code, wordt debuggen en foutafhandeling eenvoudiger.
- Betere onderhoudbaarheid
- Asynchrone processen kunnen eenvoudiger worden geschreven, waardoor het makkelijker wordt om de code aan te passen of te wijzigen en de lange termijn onderhoudbaarheid wordt verbeterd.
Voorbeeld: Promise
-keten versus async
/await
Laten we code vergelijken die gebruikmaakt van Promise
-ketens en code die gebruikmaakt van async
/await
.
1// Code using Promise chains
2function fetchDataPromise() {
3 fetch('https://codesparklab.com/json/example.json')
4 .then((response) => response.json())
5 .then((data) => {
6 console.log(data);
7 })
8 .catch((error) => {
9 console.error('Failed to fetch data:', error);
10 });
11}
12
13// Code using async/await
14async function fetchDataAsync() {
15 try {
16 const response = await fetch('https://codesparklab.com/json/example.json');
17 const data = await response.json();
18 console.log(data);
19 } catch (error) {
20 console.error('Failed to fetch data:', error);
21 }
22}
Zoals je kunt zien, kun je met async
/await
asynchrone processen op een lineaire manier schrijven, wat resulteert in beter leesbare code.
Meerdere asynchrone bewerkingen tegelijkertijd uitvoeren
Door Promise.all()
of Promise.race()
te combineren met await
, kun je meerdere asynchrone bewerkingen tegelijkertijd uitvoeren en hun resultaten gezamenlijk afhandelen.
Promise.all()
1async function fetchMultipleData() {
2 try {
3 const [data1, data2] = await Promise.all([
4 fetch('https://codesparklab.com/json/example1.json'),
5 fetch('https://codesparklab.com/json/example2.json')
6 ]);
7 const jsonData1 = await data1.json();
8 const jsonData2 = await data2.json();
9 console.log(jsonData1, jsonData2);
10 } catch (error) {
11 console.error('Failed to fetch data:', error);
12 }
13}
14
15fetchMultipleData();
Promise.all()
lost meerdere Promises tegelijkertijd op en retourneert hun resultaten als een array. Het wacht tot alle Promises zijn opgelost, en als een van hen mislukt, wordt het als een algehele mislukking beschouwd.
Promise.race()
1async function fetchFastestData() {
2 try {
3 const fastestResponse = await Promise.race([
4 fetch('https://codesparklab.com/json/example1.json'),
5 fetch('https://codesparklab.com/json/example2.json')
6 ]);
7 const jsonData = await fastestResponse.json();
8 console.log('Fastest data:', jsonData);
9 } catch (error) {
10 console.error('Fetch error:', error);
11 }
12}
13
14fetchFastestData();
- Beloof.race(). Het is handig wanneer u wilt reageren op welke asynchrone operatie het eerst voltooid. Echter, als de eerste Belofte mislukt, de fout wordt onmiddellijk gevangen door.
Promise.allSettled()
1async function fetchWithAllSettled() {
2 const results = await Promise.allSettled([
3 fetch('https://codesparklab.com/json/example1.json'),
4 fetch('https://invalid-url.com/404') // This URL will fail
5 ]);
6
7 results.forEach((result, index) => {
8 if (result.status === 'fulfilled') {
9 console.log(`Request ${index + 1} succeeded:`, result.value.url);
10 } else {
11 console.warn(`Request ${index + 1} failed:`, result.reason);
12 }
13 });
14}
15
16fetchWithAllSettled();
- Beloof.allSettled() wacht op alle resultaten, ongeacht succes of mislukking. Elk resultaat wordt teruggegeven in de vorm van "{status, waarde}" of "{status, reden}," zodat u kunt bepalen welke beloftes zijn geslaagd en welke niet.
Promise.any()
1async function fetchAnySuccessful() {
2 try {
3 const firstSuccessful = await Promise.any([
4 fetch('https://invalid-url.com/404'), // This URL will fail
5 fetch('https://codesparklab.com/json/example1.json')
6 ]);
7 const jsonData = await firstSuccessful.json();
8 console.log('First successful response:', jsonData);
9 } catch (error) {
10 console.error('All fetch requests failed:', error);
11 }
12}
13
14fetchAnySuccessful();
- Beloofd. Een uitzondering wordt alleen gegooid als alle Beloftes falen. Het kan worden gebruikt als een retry mechanisme in omgevingen waar sommige API's onbetrouwbaar zijn totdat men slaagt.
Samenvatting
async
-functie: Retourneert altijd een Promise en wordt gebruikt om asynchrone verwerking te schrijven.await
: Gebruikt om te wachten tot een Promise wordt opgelost en het resultaat te ontvangen.- Foutenafhandeling: Gebruik
try...catch
om fouten die tijdens asynchrone verwerking optreden af te handelen. - Meerdere asynchrone operaties**: Door gebruik te maken van methoden zoals.
async
/await
zijn krachtige tools voor het omgaan met asynchrone verwerking, dus zorg ervoor dat je ze gebruikt om complexe asynchrone logica te vereenvoudigen.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.