Darba sākšana ar JavaScript solījumiem
Asinhronais kods ir noderīga uzdevumu veikšanai laikietilpīgs bet, protams, tas ir nav mīnusi. Tiek izmantots Async kods atzvanīšanas funkcijas lai apstrādātu rezultātus, tomēr atzvanīšanas funkcijas nevar atgriezt vērtības kas var būt tipiskas JavaScript funkcijas.
Tādējādi viņi ne tikai atņem mūsu spēju kontrolēt funkcijas izpildi bet arī dariet kļūdu apstrāde mazliet problēmu. Tas ir, ja Solījums
objektu nāk, jo tā mērķis ir aizpildīt dažus asinhronā kodēšanā.
Solījums
tehniski ir standarta iekšējais objekts JavaScript, kas nozīmē, ka tas nāk iebūvēts JavaScript. To izmanto, lai pārstāvētu asinhronā koda bloka iespējamais rezultāts (vai koda neizdošanās iemesls) un ir metodes, kā kontrolēt kodu asinhronā koda izpildi.
Sintakse
Mēs varam radīt gadījums Solījums
objektu izmantojot jauns
atslēgvārds:
jauns solījums (funkcija (atrisināt, noraidīt) );
Funkcija kā parametrs uz Solījums ()
konstruktors ir pazīstams kā izpildītājs. Tam ir asinhronais kods un ir divi parametri Funkcija
veids, saukts par atrisināt
un noraidīt
funkcijas (īsākā laikā par tām).
ES valstis Solījums
objektu
The sākotnējā stāvoklī no a Solījums
objektu sauc gaida. Šajā stāvoklī asinhronā aprēķina rezultāts neeksistē.
Sākotnējā gaidāmais stāvoklis mainās uz izpildīti norādīt, kad aprēķins ir veikts veiksmīgi. The aprēķina rezultāts ir pieejams šajā valstī.
Ja asinhronais aprēķins neizdodas, the Solījums
objekts pārvietojas uz noraidīts no sākotnējā gaida Valsts. Šajā stāvoklī aprēķinu atteices dēļ (t.i., kļūdas ziņojums).
Lai pārietu no gaida uz izpildīti Valsts, atrisināt ()
tiek saukts. Lai pārietu no gaida uz noraidīts Valsts, noraidīt ()
tiek saukts.
The tad
un nozvejas
metodes
Kad valsts mainās no gaida uz izpildīti, notikuma rīkotājs Solījums
objekts tad
metodi tiek izpildīts. Un, kad valsts mainās no gaida uz noraidīts, notikuma rīkotājs Solījums
objekts nozvejas
metodi tiek izpildīts.
1. piemērs
“Nav apsolīts” kodu
Pieņemsim, ka ir hello.txt
fails, kas satur “Sveiki” vārds. Lūk, kā mēs varam rakstīt AJAX pieprasījumu ielādējiet šo failu un parādīt tās saturu, neizmantojot Solījums
objekts:
funkcija getTxt () let xhr = jauns XMLHttpRequest (); xhr.open ('GET', 'hello.txt'); xhr.overrideMimeType ('text / plain'); xhr.send (); xhr.onload = funkcija () try switch (this.status) lieta 200: document.write (this.response); pārtraukums; lieta 404: mest “Fails nav atrasts”; noklusējums: mest 'Neizdevās ielādēt failu'; nozvejas (err) console.log (err); getTxt ();
Ja faila saturs ir bijis veiksmīgi ielādēts, t.i.. atbildes statusa kods ir 200, atbildes teksts ir dokumentā. Ja fails ir nav atrasts (statuss 404), a “Fails nav atrasts” kļūdas ziņojums tiek izmests. Pretējā gadījumā a vispārējs kļūdas ziņojums norādot neveiksmi, kad fails tiek izmests.
“Solīts” kodu
Tagad, pieņemsim Aplieciniet iepriekš minēto kodu:
funkcija getTxt () atgriezt jaunu Promise (funkcija (atrisināt, noraidīt) let xhr = new XMLHttpRequest (); xhr.open ('GET', 'hello.txt'); xhr.overrideMimeType ('text / plain'); xhr.send (); xhr.onload = funkcija () switch (this.status) lieta 200: atrisināt (this.response); lieta 404: noraidīt (“Fails nav atrasts”); noklusējums: noraidīt („Neizdevās ielādējiet failu ');;); getTxt () tad (funkcija (txt) document.write (txt);). nozveja (funkcija (err) console.log (err););
The getTxt ()
funkcija tagad ir kodēta atgriezt jaunu. \ t Solījums
objektu, un tā izpildītāja funkcija tur no asinhronā koda.
Kad atbildes statusa kods ir 200, the Solījums
ir izpildīti līdz zvanot atrisināt ()
(atbilde tiek nodota kā atrisināt ()
). Kad statusa kods ir 404 vai kāds cits, Solījums
ir noraidīts izmantojot noraidīt ()
(ar atbilstošu kļūdas ziņojumu kā noraidīt ()
).
The notikumu apstrādātāji tad ()
un nozvejas ()
metodes no Solījums
objekts ir beigās.
Kad Solījums
ir izpildīti, -. \ t tad ()
tiek izmantota metode. Tās arguments ir parametrs ir pagājis atrisināt ()
. Notikumu apstrādātāja iekšpusē atbildes teksts (saņemts kā arguments) ir dokumentā.
Kad Solījums
ir noraidīts, notikuma rīkotājs nozvejas ()
tiek izmantota metode, kļūdas reģistrēšana.
The galvenā priekšrocība no iepriekš minētā Promisified versijas kods ir kļūdu apstrāde. Tā vietā, lai izgāztu neapzinātus izņēmumus, piemēram, nežēlotajā versijā - atbilstošus kļūdas ziņojumus tiek atgriezti un reģistrēti.
Bet tas nav tikai atgriešanās no kļūdas ziņojumi bet arī no asinhronā aprēķina rezultāts tas var būt patiesi izdevīgs mums. Lai to redzētu, mums būs jāpaplašina mūsu piemērs.
2. piemērs
“Nav apsolīts” kodu
Tā vietā, lai tikai parādītu tekstu no hello.txt
, ES gribu apvienojiet to ar “Pasaule” vārds un parādiet to ekrānā pēc 2 sekunžu laika. Šeit ir izmantotais kods:
funkcija getTxt () let xhr = jauns XMLHttpRequest (); xhr.open ('GET', 'hello.txt'); xhr.overrideMimeType ('text / plain'); xhr.send (); xhr.onload = funkcija () try switch (this.status) lieta 200: document.write (concatTxt (this.response)); pārtraukums; lieta 404: mest “Fails nav atrasts”; noklusējums: mest 'Neizdevās ielādēt failu'; nozvejas (err) console.log (err); funkcija concatTxt (res) setTimeout (funkcija () atgriešanās (res + 'World'), 2000); getTxt ();
Uz statusa kodu 200, concatTxt ()
funkcija tiek izsaukta saista atbildes tekstu ar “Pasaule” vārds pirms tā ierakstīšanas dokumentā.
Bet, šis kods nedarbosies kā vēlams. The setTimeout ()
atzvanīšanas funkcija nevar atgriezt sakabinātu virkni. Kas tiks izdrukāts uz dokumentu, ir nenoteikts
jo tas ir kas concatTxt ()
atgriežas.
“Solīts” kodu
Tātad, lai veiktu kodu, pieņemsim Aplieciniet iepriekš minēto kodu, tostarp concatTxt ()
:
funkcija getTxt () atgriezt jaunu Promise (funkcija (atrisināt, noraidīt) let xhr = new XMLHttpRequest (); xhr.open ('GET', 'hello.txt'); xhr.overrideMimeType ('text / plain'); xhr.send (); xhr.onload = funkcija () switch (this.status) lieta 200: atrisināt (this.response); lieta 404: noraidīt (“Fails nav atrasts”); noklusējums: noraidīt („Neizdevās ielādējiet failu ');;); funkcija concatTxt (txt) atgriezt jaunu solījumu (funkcija (atrisināt, noraidīt) setTimeout (funkcija () atrisināt (txt + 'World');, 2000);); getTxt (), tad ((txt) => atgriezties concatTxt (txt);). ((txt) => document.write (txt);) nozvejas ((err) => konsole. log (err););
Tieši kā getTxt ()
, the concatTxt ()
darbojas arī atgriež jaunu Solījums
objektu saliktā teksta vietā. The Solījums
atpakaļ concatTxt ()
ir atrisināts iekšējās atzvanīšanas funkcija setTimeout ()
.
Netālu no iepriekš minētā koda beigām pirmā notikuma rīkotājs tad ()
metode darbojas, kad Solījums
no getTxt ()
ir izpildīti, tas ir, kad fails ir veiksmīgi ielādēts. Iekšējā apstrādātāja, concatTxt ()
tiek saukts un Solījums
atpakaļ concatTxt ()
tiek atgriezta.
Otrā pasākuma rīkotājs tad ()
metode darbojas, kad Solījums
atpakaļ concatTxt ()
ir izpildīti, t.i. divas sekundes ir beidzies laiks un atrisināt ()
tiek saukts ar savienoto virkni kā tās parametru.
Visbeidzot, nozvejas ()
nozvejot visus izņēmumus un kļūdas ziņojumus no abiem solījumiem.
Šajā solītajā versijā “Sveika pasaule” virkne būs veiksmīgi izdrukāts dokumentam.