⊗jsSpPrmInr 162 of 294 menu

JavaScript-те промисерге кіріспе

Сіздер қазірдің өзінде асинхрондылықтың коллбэк үлгісін қолдану callback hell жағдайын оңай тудыратынын білесіздер. Сондықтан JavaScript-те промис (promise) деп аталатын жаңа үлгі енгізілді. Осы үлгіні үйренейік.

Промис - бұл объект, оған параметр ретінде біздің асинхронды кодымызды орналастыруымыз керек болатын функция беріледі:

let promise = new Promise(function() { // асинхронды код });

Көріп тұрғаныңыздай, мен промис объектісін promise айнымалысына жаздым. Кодтың басқа жерінде мен осы айнымалыға осы промис аяқталғанда орындалуы тиіс код бар функцияны беріп, then әдісін қолдана аламын:

promise.then(function() { // асинхронды код аяқталғанда орындалады });

Бұл шатастырып түсіретін сияқты, сондықтан мысалға қарайық. Менде мынадай асинхронды код бар делік:

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

Мен ол үшін асинхрондылықтың негізгі мәселесін шешкім келеді: таймер оралғаннан кейін белгілі бір кодты орындау. Сонымен бірге мен бұл кодты таймердің өзіне орналастырғымы келмейді және осы кодқа мен result айнымалысына жазған нәтиже қандай да бір жолмен жеткізілуін қалаймын. Жалпы алғанда, біз бұл мәселені алдыңғы сабақтарда коллбэктер мен жазылымдар арқылы шештік. Енді оны промисстер арқылы қалай шешуге болатынын қарастырайық.

Алдымен біздің асинхронды кодымызды промиске орау керек:

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

Бірақ бұл жеткіліксіз. Біз асинхронды кодымыздың аяқталғанын анық көрсетуіміз керек. Бұл жерде бізге параметр көрсетілген жағдайда функцияның бірінші параметріне автоматты түрде түсетін арнайы аяқтау функциясы көмектеседі:

let promise = new Promise(function(resolve) { // параметрді көрсетеміз setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Аяқтау функциясының көмегімен біз промиске асинхронды кодтың қашан аяқталғанын анық көрсете аламыз. Ол үшін біз бұл функцияны қажетті жерде шақыруымыз керек:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // промисті аяқтаймыз }, 3000); });

Сонымен бірге, егер біз асинхронды кодтың қандай да бір нәтижесін сыртқа жеткізгіміз келсе, оны аяқтау функциямызға параметр ретінде бере аламыз:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // нәтижені береміз }, 3000); });

Әрине, аралық айнымалыдан құтылуға болады:

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

Енді кез келген басқа жерде біз промисымыздың then әдісін шақыра аламыз:

promise.then(function() { // промис аяқталғанда орындалады });

Промис жұмысының нәтижесі біз оны көрсеткіміз келген жағдайда функцияның бірінші параметріне түседі:

promise.then(function(result) { console.log(result); // нәтиже массивін шығарады });

Ішінде 5 секундтық кідірісі бар промис жасаңыз, содан кейін промис орындалып, қандай да бір мәтінді нәтиже ретінде қайтаруы керек. Бұл мәтінді экранға шығарыңыз.

Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау