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 հարցումներ կատարելը կամ ֆայլից կարդալը: Նրանք թույլ են տալիս գրել կոդ, որը կկատարվի ապագայում, ինչ-որ այլ գործողությունների ավարտից հետո, առանց սպասելու և «արգելափակելու» ծրագրի կատարումը: