⊗jsSpPrmInr 162 of 294 menu

Promiside sissejuhatus JavaScriptis

Te juba teate, et kõne tagasimudeli asünkroonsuse kasutamine viib kergesti olukorrani callback hell. Seetõttu võeti JavaScripti kasutusele uus mudel nimega promis (promise). Õppigem seda mudelit.

Promis kujutab endast objekti, kuhu parameetrina edastatakse funktsioon, mille sees tuleb paigutada meie asünkroonne kood:

let promise = new Promise(function() { // asünkroonne kood });

Nagu näete, kirjutasin promisega objekti muutujasse promise. Mõnes muus kohas koodis võin sellele muutujale rakendada meetodit then, edastades sinna funktsiooni koodiga, mis tuleb täita pärast selle promisi loomisel kirjutatud asünkroonse koodi lõppu:

promise.then(function() { // täidetakse asünkroonse koodi lõppedes });

Kõlab segaselt, nii et vaatame näidet. Oletame, et mul on selline asünkroonne kood:

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

Oletame, et ma tahan selle jaoks lahendada meie põhilise asünkroonsuse ülesande: täita mingi kood pärast taimeri käivitumist. Samas ma ei soovi seda koodi paigutada taimeri sisse ja soovin, et sellesse koodi mingil moel satuks tulemus, mille ma kirjutasin muutujasse result. Üldiselt oleme selle ülesande lahendanud eelmistes õppetundides läbi kõnetagastuste ja tellimuste. Vaatame nüüd, kuidas seda teha promiside kaudu.

Alustuseks tuleb meie asünkroonne kood mähkida promisisse:

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

Sellest aga ei piisa. Me peame otseselt määrama, et meie asünkroonne kood on lõppenud. Selles aitab meid spetsiaalne lõpetamisfunktsioon, mis automaatselt saabub esimeseks parameetriks funktsioonile, kui see on määratud:

let promise = new Promise(function(resolve) { // määrame parameetri setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Lõpetamisfunktsiooni abil saame otseselt määrata promisile, et asünkroonne kood on lõppenud. Selleks peame kutsuma selle funktsiooni välja meile vajalikus kohas:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // lõpetame promisi }, 3000); });

Samuti, kui soovime edastada väljapoole mingit asünkroonse koodi tulemust, saame selle edastada parameetrina meie lõpetamisfunktsioonile:

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

Loomulikult võib lahti saada vahepealsest muutujast:

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

Nüüd saame igas muus kohas välja kutsuda meie promisi meetodi then:

promise.then(function() { // käivitub promisi lõppedes });

Promisi töö tulemus satub esimesse funktsiooni parameetrisse, kui soovime selle määrata:

promise.then(function(result) { console.log(result); // väljastab massiivi tulemusega });

Tehke promis, mille sees on viivitus 5 sekundit, mille järel promis peab valmima, tagastades oma tulemusena mingi teksti. Kuva see tekst ekraanile.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu