⊗jsSpPrmInr 162 of 294 menu

JavaScript-de promiseleriň girişi

Ýatda bolşy ýaly, asinhronlyk üçin çaýyrmagaty modelini ulanmak, ýeňilleşik bilen callback hell ýagdaýyna getirýär. Şoňa görä-de JavaScript-de promiseler (promise) atly täze model girizildi. Geliň bu modeli övreneliň.

Promis, parametr hökmünde bir funksiýa geçirilýän bir obýekti aňladýar, onuň içinde asinhron kodymyzy ýerleşdirmeli:

let promise = new Promise(function() { // asinhron kod });

Görşüňiz ýaly, men promisli obýekti promise üýtgeýjisine ýazdym. Koduň başga bir ýerinde, men bu üýtgeýjide then metodyny ulanyp, bu promisi döredende ýazylan asinhron kod tamamlananda ýerine ýetirilmeli kodly funksiýany ona geçirip bilerin:

promise.then(function() { // asinhron kod tamamlananda ýerine ýetirer });

Bu çylşyrymly eşidilýär, şonuň üçin bir mysala serediň. Mende şeýle bir asinhron kod bar bolsun:

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

Farz edeliň, men onuň üçin asinhronlygyň esasy meselesini çözmek isleýärin: taymer işjeňleşenden soň belli bir kody ýerine ýetirmek. Bu ýagdaýda, men bu kody taymeriň özünde ýerleşdirmek islemeýärin we bu koda nähili bolsa-da result üýtgeýjisinde ýazan netijemiň düşmegini isleýärin. Esasan, bu meseläni öňki sapaklarda çaýyrmagatlar we ýazylmalar arkaly çözdük. Geliň indi muny promiseler arkaly nähili ýerine ýetirip boljakdygyny göreliň.

Ilki bilen, asinhron kodymyzy bir promisiň içine geçirmeli:

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

Emma bu ýeterlik däl. Biz asinhron kodymyzyň tamamlanandygyny aýdyň görkezmeli. Bu işde bize, görkezilse, funksiýanyň birinji parametrine awtomatik düşýän ýörite tamamlaýjy funksiýa kömek eder:

let promise = new Promise(function(resolve) { // parametri görkezýäris setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Tamamlaýjy funksiýanyň kömegi bilen, biz promise aýdyň görkezip bileris, asinhron kod tamamlandy. Munuň üçin bu funksiýany isleýän ýerimizde çagyrmaly:

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

Şeýle hem, eger asinhron koduň bir netijesini daşary ýola geçirmek islesek, ony tamamlaýjy funksiýamyzyň parametri hökmünde geçirip bileris:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // netijäni geçirýäris }, 3000); });

Elbetde, aralyk üýtgeýjisinden gutulyp bolýar:

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

Indi islendik başga ýerde promisimiziň then metodyny çaýyryp bileris:

promise.then(function() { // promis tamamlananda işjeňleşer });

Promisiň iş netijesi, islesek, funksiýanyň birinji parametrine düşer:

promise.then(function(result) { console.log(result); // netijeli massiw çykarar });

Içinde 5 sekuntlyk gijikme bolan, soňra promisiň ýerine ýetirilmeli we öz netijesi hökmünde bir tekst gaytarmaly bolan bir promis düzüň. Bu teksti ekrana çykaryň.

Türkmen
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkçeЎзбекOʻzbekTiếng Việt
Biz sahypanyň işlemegi, analitika we şahsyýetleşdirmek üçin cookie ulanýarys. Maglumatlaryň işlenişi Gizlinlik syýasaty boýunça amala aşyrylýar.
hemmesini kabul et sazlamak ret et