У овом упутству ћете научити о ЈаваСцрипт обећањима и ланцима обећања уз помоћ примера.
У ЈаваСцрипт-у обећање је добар начин за руковање асинхроним операцијама. Користи се за откривање да ли је асинхрона операција успешно завршена или није.
Обећање може имати једно од три стања.
- нерешен
- Испуњено
- Одбијен
Обећање почиње у стању на чекању. То значи да процес није потпун. Ако је операција успешна, процес се завршава у испуњеном стању. А ако се догоди грешка, процес се завршава у одбијеном стању.
На пример, када захтевате податке од сервера помоћу обећања, они ће бити у стању на чекању. Када подаци успешно стигну, биће у испуњеном стању. Ако се догоди грешка, она ће бити у одбијеном стању.
Створите обећање
Да бисмо креирали обећавајући објекат, користимо Promise()
конструктор.
let promise = new Promise(function(resolve, reject)( //do something ));
Promise()
Конструктор узима функцију као аргумент. Функција такође прихвата две функције resolve()
и reject()
.
Ако се обећање врати успешно, resolve()
позива се функција. И, ако дође до грешке, reject()
функција се позива.
Претпоставимо да је програм у наставку асинхрони програм. Тада се програмом може управљати помоћу обећања.
Пример 1: Програм са обећањем
const count = true; let countValue = new Promise(function (resolve, reject) ( if (count) ( resolve("There is a count value."); ) else ( reject("There is no count value"); ) )); console.log(countValue);
Оутпут
Обећање (: „Постоји вредност бројања.“)
У горњем програму Promise
се креира објекат који има две функције: resolve()
и reject()
. resolve()
се користи ако је процес успешан и reject()
користи се када се у обећању догоди грешка.
Обећање се разрешава ако је вредност броја тачна.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining.png.webp)
ЈаваСцрипт Промисе Цхаининг
Обећања су корисна када морате да решавате више од једног асинхроног задатка, једно за другим. За то користимо ланац обећања.
Можете извршити операцију након обећање је решен коришћењем методе then()
, catch()
и finally()
.
ЈаваСцрипт тхен () метода
then()
Метода се користи уз повратни позив када је обећање је успешно испуњен или решен.
Синтакса then()
методе је:
promiseObject.then(onFulfilled, onRejected);
Пример 2: Ланцирање обећања помоћу тхен ()
// returns a promise let countValue = new Promise(function (resolve, reject) ( resolve('Promise resolved'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) .then( function successValue1() ( console.log('You can call multiple functions this way.'); ), );
Оутпут
Обећање решено На овај начин можете позвати више функција.
У горњем програму, then()
метода се користи за повезивање функција у обећање. then()
Метод се позива када обећање је успешно решен.
Помоћу then()
обећања можете повезати више метода.
ЈаваСцрипт цатцх () метода
catch()
Метода се користи уз повратни позив када је обећање буде одбијен или ако се појави грешка. На пример,
// returns a promise let countValue = new Promise(function (resolve, reject) ( reject('Promise rejected'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) // executes if there is an error .catch( function errorValue(result) ( console.log(result); ) );
Оутпут
Обећање одбијено
У горњем програму обећање је одбијено. А catch()
метода се користи уз обећање да ће решити грешку.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining_2.png.webp)
ЈаваСцрипт Промисе Версус Цаллбацк
Обећања су слична функцијама повратног позива у смислу да се обе могу користити за обраду асинхроних задатака.
ЈаваСцрипт функције повратног позива могу се користити и за извршавање синхроних задатака.
Њихове разлике могу се сажети у следеће тачке:
ЈаваСцрипт Промисе
- Синтакса је једноставна за употребу и лака за читање.
- Руковање грешкама је лакше за управљање.
- Пример:
апи (). тхен (фунцтион (ресулт) (ретурн апи2 ();)). тхен (фунцтион (ресулт2) (ретурн апи3 ();)). тхен (фунцтион (ресулт3) (// до ворк)). цатцх ( фунцтион (еррор) (// обрађујемо сваку грешку која се може догодити пре ове тачке));
ЈаваСцрипт повратни позив
- Синтакса је тешко разумљива.
- Управљање грешкама је можда тешко управљати.
- Пример:
апи (функција (резултат) (апи2 (функција (резултат2) (апи3 (функција (резултат3) (// радим ако (грешка) (// радим нешто) друго (// радим нешто)));));) ;
ЈаваСцрипт коначно () метода
You can also use the finally()
method with promises. The finally()
method gets executed when the promise is either resolved successfully or rejected. For example,
// returns a promise let countValue = new Promise(function (resolve, reject) ( // could be resolved or rejected resolve('Promise resolved'); )); // add other blocks of code countValue.finally( function greet() ( console.log('This code is executed.'); ) );
Output
This code is executed.
JavaScript Promise Methods
There are various methods available to the Promise object.
Method | Description |
---|---|
all(iterable) | Waits for all promises to be resolved or any one to be rejected |
allSettled(iterable) | Waits until all promises are either resolved or rejected |
any(iterable) | Returns the promise value as soon as any one of the promises is fulfilled |
race(iterable) | Wait until any of the promises is resolved or rejected |
reject(reason) | Returns a new Promise object that is rejected for the given reason |
resolve(value) | Returns a new Promise object that is resolved with the given value |
catch() | Appends the rejection handler callback |
then() | Appends the resolved handler callback |
finally() | Appends a handler to the promise |
To learn more about promises in detail, visit JavaScript Promises.