„Javscript“ asinchroninis / laukimas

Šioje pamokoje su pavyzdžių pagalba sužinosite apie „JavaScript“ asinchronizavimo / laukimo raktinius žodžius.

Raktinį asyncžodį su funkcija naudojate norėdami parodyti, kad funkcija yra asinchroninė funkcija. Async funkcija grąžina pažadą.

asyncFunkcijos sintaksė yra tokia:

 async function name(parameter1, parameter2,… paramaterN) ( // statements )

Čia

  • pavadinimas - funkcijos pavadinimas
  • parametrai - parametrai, kurie perduodami funkcijai

Pavyzdys: Async funkcija

 // async function example async function f() ( console.log('Async function.'); return Promise.resolve(1); ) f(); 

Rezultatas

 Async funkcija.

Pirmiau minėtoje programoje asyncraktinis žodis naudojamas prieš funkciją, siekiant parodyti, kad funkcija yra asinchroninė.

Kadangi ši funkcija grąžina pažadą, galite naudoti tokį grandinės metodą then():

 async function f() ( console.log('Async function.'); return Promise.resolve(1); ) f().then(function(result) ( console.log(result) ));

Rezultatas

 Async funkcija 1

Pirmiau pateiktoje programoje f()funkcija išspręsta ir then()metodas vykdomas.

„JavaScript“ laukia raktinio žodžio

awaitRaktažodis naudojamas viduje asyncfunkcija laukti asinchroninio veikimo.

Laukiama sintaksė yra:

 let result = await promise;

Naudojant awaitpristabdoma „async“ funkcija, kol pažadas grąžins rezultato (išspręsti ar atmesti) vertę. Pavyzdžiui,

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

Rezultatas

 Pažadas išsisprendęs labas

Pirmiau pateiktoje programoje Promiseobjektas yra sukurtas ir jis išsprendžiamas po 4000 milisekundžių. Čia asyncFunc()funkcija parašyta naudojant asyncfunkciją.

Į awaitraktažodžius laukia pažado būti baigtas (apsisprendimas arba atmesti).

 let result = await promise;

Taigi, labas rodomas tik tada, kai rezultato kintamajam pasiekiama pažadų vertė.

Jei awaitnenaudojama pirmiau pateiktoje programoje, prieš pažadą išsprendžiant rodomas labas.

Async / await funkcijos veikimas

Pastaba : Galite naudoti awaittik asinchroninių funkcijų viduje.

Async funkcija leidžia asinchroninį metodą vykdyti iš pažiūros sinchroniniu būdu. Nors operacija yra asinchroninė, atrodo, kad operacija vykdoma sinchroniškai.

Tai gali būti naudinga, jei programoje yra keli pažadai. Pavyzdžiui,

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

Aukščiau pateiktoje programoje awaitlaukite , kol kiekvienas pažadas bus įvykdytas.

Klaida tvarkant

Naudodamiesi asyncfunkcija, kodą rašote sinchroniškai. Taip pat galite naudoti catch()metodą klaidai sugauti. Pavyzdžiui,

 asyncFunc().catch( // catch error and do something )

Kitas būdas pašalinti klaidą yra try/catchblokavimas. Pavyzdžiui,

 // 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

Pirmiau pateiktoje programoje try/catchklaidoms pašalinti naudojome bloką. Jei programa sėkmingai veikia, ji pateks į trybloką. Ir jei programa išmeta klaidą, ji pateks į catchbloką.

Norėdami sužinoti daugiau apie try/catchtai išsamiai, apsilankykite „JavaScript JavaScript try / catch“.

Async funkcijos naudojimo pranašumai

  • Kodas yra lengviau įskaitomas, nei naudojant atgalinį skambutį ar pažadą.
  • Klaidų tvarkymas yra paprastesnis.
  • Derinti lengviau.

Pastaba : Šie du raktiniai žodžiai async/awaitbuvo įvesti naujesnėje „JavaScript“ versijoje (ES8). Kai kurios senesnės naršyklės gali nepalaikyti async / await naudojimo. Norėdami sužinoti daugiau, apsilankykite „JavaScript async“ / laukite naršyklės palaikymo.

Įdomios straipsniai...