Mājas lapa » Kodēšana » Darba sākšana ar JavaScript solījumiem

    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.