JavaScript-ի խոստումը համակարգչային ծրագրի համար ապագայում ինչ-որ բան անելու միջոց է, այն բանից հետո, երբ այն ավարտի այն, ինչ անում է հիմա:
Պատկերացրեք, որ խոհանոցում եք սենդվիչ պատրաստում: Դուք պետք է սպասեք հացի կենացին, նախքան սենդվիչի մնացած բաղադրիչները դնել դրա վրա: Մինչ դուք սպասում եք հացի կենացին, կարող եք այլ բաներ անել, օրինակ՝ սեղան դնել կամ սկսել թեյի համար մի քիչ ջուր եռացնել:
JavaScript-ի խոստումը նման է տոստի հացին այս սցենարում: Ծրագիրը սկսում է տոստի գործընթացը և այնուհետև «խոստանում» անել մեկ այլ բան (օրինակ՝ սենդվիչի բաղադրիչները հացի վրա դնել), երբ հացը տոստի ավարտում է: Մինչ այն սպասում է հացի տոստի ավարտին, ծրագիրը կարող է անել այլ բաներ և ստիպված չլինի սպասել, որ կենացը պատրաստ լինի:
Խոստումները օգտակար են, քանի որ դրանք օգնում են համոզվել, որ ծրագիրը չի «կպչում» սպասելով ինչ-որ բանի, և կարող է սահուն աշխատել, մինչ այն սպասում է: Սա հատկապես կարևոր է, երբ ծրագիրը փոխազդում է ինտերնետի հետ, քանի որ երբեմն կարող է որոշ ժամանակ պահանջվել, որպեսզի կայքը կամ սերվերը հետ ուղարկեն ծրագրին անհրաժեշտ տեղեկատվությունը:
Այսպիսով, մի խոսքով, JavaScript-ի խոստումը ծրագրի համար ապագայում ինչ-որ բան անելու միջոց է, այն բանից հետո, երբ այն ավարտի մեկ այլ բան, որն այժմ անում է: Դա նման է ինքներդ ձեզ կամ մեկ ուրիշին խոստանալու, որ հետագայում ինչ-որ բան անելու համար, բայց համակարգչային ծրագրի համար:
Օրինակ
function getDataFromServer() { return new Promise(function(resolve, reject) { // Make an HTTP request to a server to get some data const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/data.json'); xhr.onload = function() { if (xhr.status === 200) { // If the request is successful, resolve the promise with the data resolve(xhr.response); } else { // If the request is not successful, reject the promise reject(Error(xhr.statusText)); } }; xhr.onerror = function() { // If there is an error with the request, reject the promise reject(Error('Error making the request')); }; xhr.send(); }); }
Այս ֆունկցիան HTTP հարցում է ուղարկում սերվերին՝ որոշ տվյալներ ստանալու համար, և վերադարձնում է խոստում, որը կա՛մ «կլուծվի» տվյալների հետ, եթե հարցումը հաջող լինի, կա՛մ «մերժվի», եթե կա սխալ:
Այս ֆունկցիան օգտագործելու և այն վերադարձնող խոստումը կարգավորելու համար կարող եք անել այսպես.
getDataFromServer() .then(function(data) { // Do something with the data if the promise is resolved console.log(data); }) .catch(function(error) { // Do something with the error if the promise is rejected console.error(error); });
Այս օրինակում then()
ֆունկցիան կանչվում է, եթե խոստումը լուծված է, իսկ catch()
ֆունկցիան կանչվում է, եթե խոստումը մերժվում է:
Այսպիսով, երբ զանգահարեք getDataFromServer()
ֆունկցիան, այն HTTP հարցում կկատարի սերվերին և կվերադարձնի խոստում: Եթե հարցումը հաջողվի, խոստումը կլուծվի սերվերի տվյալների հետ, և կաշխատի then()
ֆունկցիայի կոդը: Եթե հարցումը սխալ լինի, խոստումը կմերժվի, և փոխարենը կաշխատի catch()
ֆունկցիայի կոդը:
Խոստումները JavaScript-ում ասինխրոն գործողություններ կատարելու օգտակար միջոց են, ինչպես օրինակ՝ HTTP հարցումներ կատարելը կամ ֆայլից կարդալը: Նրանք թույլ են տալիս գրել կոդ, որը կկատարվի ապագայում, ինչ-որ այլ գործողությունների ավարտից հետո, առանց սպասելու և «արգելափակելու» ծրագրի կատարումը: