⊗jsSpPrmInr 162 of 294 menu

Įvadas į JavaScript pažadus

Jau žinote, kad naudojant atgalinio kvietimo modelį asinchroniškumui lengvai patenkama į callback hell situaciją. Todėl JavaScript buvo įvestas naujas modelis, vadinamas pažadais (promise). Išmokime šį modelį.

Pažadas yra objektas, kuriam parametru perduodama funkcija, kurios viduje reikia patalpinti mūsų asinchroninį kodą:

let promise = new Promise(function() { // asinchroninis kodas });

Kaip matote, objektą su pažadu įrašiau į kintamąjį promise. Kitoje kodo vietoje galiu pritaikyti šiam kintamajam metodą then, perduodant į jį funkciją su kodu, kuris turi būti vykdomas pasibaigus asinchroniniam kodui, parašytam kurdamas šį pažadą:

promise.then(function() { // vyks pasibaigus asinchroniniam kodui });

Skamba painiai, todėl pažiūrėkime pavyzdžiu. Tarkime, turiu tokį asinchroninį kodą:

setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000);

Tarkime, noriu išspręsti jam mūsų pagrindinę asinchroniškumo užduotį: vykdyti tam tikrą kodą po to, kai suveiks laikmatis. Be to, nenoriu talpinti šio kodo pačiame laikmatyje ir noriu, kad į šį kodą kaip nors patektų rezultatas, parašytas mano kintamajame result. Iš esmės, šią užduotį sprendėme ankstesnėse pamokose per atgalinius kvietimus ir prenumeratas. Pažiūrėkime dabar, kaip tai padaryti per pažadus.

Pirmiausia reikia apvynioti mūsų asinchroninį kodą į pažadą:

let promise = new Promise(function() { setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

To, tačiau, nepakanka. Mes turime aiškiai nurodyti, kad mūsų asinchroninis kodas pasibaigė. Tam mums padės speciali baigimo funkcija, automatiškai patekianti į pirmąjį funkcijos parametrą, jei jis nurodytas:

let promise = new Promise(function(resolve) { // nurodome parametrą setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Naudodami baigimo funkciją galime aiškiai nurodyti pažadui, kad asinchroninis kodas pasibaigė. Tam turime iškviesti šią funkciją mums reikiamoje vietoje:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // užbaigiame pažadą }, 3000); });

Be to, jei norime perduoti į išorę kokį nors asinchroninio kodo rezultatą, galime jį perduoti parametru mūsų baigimo funkcijai:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // perduodame rezultatą }, 3000); });

Žinoma, galima atsikratyti tarpinio kintamojo:

let promise = new Promise(function(resolve) { setTimeout(function() { resolve([1, 2, 3, 4, 5]); }, 3000); });

Dabar bet kurioje kitoje vietoje galime iškviesti mūsų pažado metodą then:

promise.then(function() { // suveiks pasibaigus pažadui });

Pažado veikimo rezultatas pateks į pirmąjį funkcijos parametrą, jei panorėsime jį nurodyti:

promise.then(function(result) { console.log(result); // išves masyvą su rezultatu });

Sukurkite pažadą, kurio viduje bus delsimas 5 sekundes, po kurio pažadas turi įvykti, savo rezultatu grąžindamas kokį nors tekstą. Išveskite šį tekstą į ekraną.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti