[[oktatas:web:javascript|< JavaScript]] ====== JavaScript Promise ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2022 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Mire használjuk ===== A Promise segítségével egy aszinkron folyamat eredményét várjuk. ===== Promise létrehozása ===== new Promise() var p = new Promise((resolve, reject) => {}); ===== A Promise állapotai ===== * pending - folyamatban van * fulfilled - resolve - sikeres választ * rejected - sikertelen választ ===== Promise használat ===== ==== Tevékenység a Promison belül ==== var p = new Promise((resolve, reject) => { let a = 30+35; if(a == 65) { resolve('Success'); }else { reject('Failed'); } }); Böngésző konzoljára: p ==== Eredmény lekérése ==== p.then(res => { console.log('A then eredménye: ', res); }) .catch(err => { console.log('A catch eredménye: ', err); }) ===== Szállítás ===== ==== A Promise ==== const szallitas = new Promise((szallitas, visszautasitas) => {}); Nézzük meg a böngészőben. Írjuk konzolon: szallitas Majd: ==== Szállítás ==== Sikeres szállítás: const szallitas = new Promise((szallitas, visszautasitas) => { szallitas(); }); Sikertelenség: const szallitas = new Promise((szallitas, visszautasitas) => { visszautasitas(); }); ==== A szállítás szimulációja ==== const szallitas = new Promise((szallitas, visszautasitas) => { const ran = Math.random(); console.log(ran); if (ran > 0.5) { szallitas(); } visszautasitas(); }); ==== Késleltetés ==== const szallitas = new Promise((szallitas, visszautasitas) => { setTimeout(()=> { const ran = Math.random(); console.log(ran); if (ran > 0.5) { szallitas(); } visszautasitas(); }, 10000); }); ==== Az eredmény használata ==== const szallitas = new Promise((szallitas, visszautasitas) => { setTimeout(()=> { const ran = Math.random(); console.log(ran); if (ran > 0.5) { szallitas(); } visszautasitas(); }, 10000); }); szallitas.then(() => { console.log('Szállítás történik'); }) szallitas.catch(() => { console.log('Hiba! Sikertelen szállítás!'); }); ==== Használat függvényként ==== const lekerSzallitas = () => { return new Promise((szallitas, visszautasitas) => { setTimeout(()=> { const ran = Math.random(); console.log(ran); if (ran > 0.5) { szallitas(); } visszautasitas(); }, 10000); }); }; lekerSzallitas().then(() => { console.log('Szállítás történik'); }); lekerSzallitas().catch(() => { console.log('Hiba! Sikertelen szállítás!'); }); ==== Vonatozás ==== const lekerSzallitas = () => { return new Promise((szallitas, visszautasitas) => { setTimeout(()=> { const ran = Math.random(); console.log(ran); if (ran > 0.5) { szallitas(); } visszautasitas(); }, 10000); }); }; lekerSzallitas().then(() => { console.log('Szállítás történik'); }) .catch(() => { console.log('Hiba! Sikertelen szállítás!'); }); ==== Üzenetek Promise-ból ==== const lekerSzallitas = () => { return new Promise((szallitas, visszautasitas) => { setTimeout(()=> { const ran = Math.random(); console.log(ran); if (ran > 0.5) { szallitas('Siker'); } visszautasitas('Hiba! A szállítás nem lehetséges'); }, 10000); }); }; lekerSzallitas().then( res => { console.log(res); }) .catch( res => { console.log(res); }); ===== Függelék ===== ==== Korábban ==== A függőségek pokla: getPosts('https://zold.lan/employees', function (employees) { getOneEmploye('https://zold.lan/employee/' + employees[0].id, function (employee) { someData(employee, function (employeeData) { renderEmployee(employeeData); }); }); }); ===== Linkek ===== * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise (2022) Kapcsolódó: * https://gomakethings.com/promise-based-xhr/ (2022)