I denne vejledning lærer du om JavaScript async / afventer nøgleord ved hjælp af eksempler.
Du bruger async
nøgleordet med en funktion til at repræsentere, at funktionen er en asynkron funktion. Async-funktionen returnerer et løfte.
Funktionens syntaks async
er:
async function name(parameter1, parameter2,… paramaterN) ( // statements )
Her,
- navn - funktionens navn
- parametre - parametre, der overføres til funktionen
Eksempel: Async-funktion
// async function example async function f() ( console.log('Async function.'); return Promise.resolve(1); ) f();
Produktion
Async-funktion.
I ovenstående program async
bruges nøgleordet før funktionen til at repræsentere, at funktionen er asynkron.
Da denne funktion returnerer et løfte, kan du bruge kædemetoden then()
som denne:
async function f() ( console.log('Async function.'); return Promise.resolve(1); ) f().then(function(result) ( console.log(result) ));
Produktion
Async-funktion 1
I ovenstående program f()
løses funktionen, og then()
metoden udføres.
JavaScript afventer søgeord
Den await
søgeord bruges inde i async
funktionen til at vente på den asynkrone drift.
Syntaksen, der skal bruges, afventer:
let result = await promise;
Brug af await
pauser async-funktionen, indtil løftet returnerer en resultatværdi (løsning eller afvisning). For eksempel,
// a promise let promise = new Promise(function (resolve, reject) ( setTimeout(function () ( resolve('Promise resolved')), 4000); )); // async function async function asyncFunc() ( // wait until the promise resolves let result = await promise; console.log(result); console.log('hello'); ) // calling the async function asyncFunc();
Produktion
Løftet løst hej
I ovenstående program Promise
oprettes et objekt, og det løses efter 4000 millisekunder. Her asyncFunc()
skrives async
funktionen ved hjælp af funktionen.
De await
søgeord venter løftet om at være komplet (beslutter eller afvise).
let result = await promise;
Derfor vises hej kun, når løfteværdien er tilgængelig for resultatvariablen.
I ovenstående program, hvis await
ikke bruges, vises hej, før løftet er løst.
Bemærk : Du kan await
kun bruge inde i async-funktioner.
Asynk-funktionen gør det muligt at udføre den asynkrone metode på en tilsyneladende synkron måde. Selvom operationen er asynkron, ser det ud til, at operationen udføres synkront.
Dette kan være nyttigt, hvis der er flere løfter i programmet. For eksempel,
let promise1; let promise2; let promise3; async function asyncFunc() ( let result1 = await promise1; let result2 = await promise2; let result3 = await promise3; console.log(result1); console.log(result1); console.log(result1); )
I ovenstående program await
venter på, at hvert løfte er komplet.
Fejlhåndtering
Mens du bruger async
funktionen, skriver du koden synkront. Og du kan også bruge catch()
metoden til at fange fejlen. For eksempel,
asyncFunc().catch( // catch error and do something )
Den anden måde, du kan håndtere en fejl på, er ved hjælp af try/catch
blok. For eksempel,
// a promise let promise = new Promise(function (resolve, reject) ( setTimeout(function () ( resolve('Promise resolved')), 4000); )); // async function async function asyncFunc() ( try ( // wait until the promise resolves let result = await promise; console.log(result); ) catch(error) ( console.log(error); ) ) // calling the async function asyncFunc(); // Promise resolved
I ovenstående program har vi brugt try/catch
blok til at håndtere fejlene. Hvis programmet kører med succes, går det til try
blokken. Og hvis programmet kaster en fejl, går det til catch
blokken.
Hvis du vil lære mere om try/catch
i detaljer, skal du besøge JavaScript prøve / fangst.
Fordele ved at bruge async-funktion
- Koden er mere læselig end at bruge et tilbagekald eller et løfte.
- Fejlhåndtering er enklere.
- Fejlretning er lettere.
Bemærk : Disse to nøgleord async/await
blev introduceret i den nyere version af JavaScript (ES8). Nogle ældre browsere understøtter muligvis ikke brugen af asynkronisering / afventning. Hvis du vil vide mere, skal du besøge JavaScript async / afvente browsersupport.