Обіцянка - це "річ", яка так би мовити "результативні" результати операції. Сенс, який слід зазначити тут, полягає в тому, що він абстрагує деталі, коли щось відбувається, і дозволяє зосередитись на тому, що має відбуватися після того, як щось відбувається. Це призведе до отримання чистого, доступного коду, коли замість зворотного дзвінка всередині зворотного дзвінка всередині зворотного дзвінка ваш код буде виглядати приблизно так:
var request = new Promise(function(resolve, reject) {
//do an ajax call here. or a database request or whatever.
//depending on its results, either call resolve(value) or reject(error)
//where value is the thing which the operation's successful execution returns and
//error is the thing which the operation's failure returns.
});
request.then(function successHandler(result) {
//do something with the result
}, function failureHandler(error) {
//handle
});
Специфікація обіцянок говорить про те, що обіцянка
then
метод повинен повернути нову обіцянку, яка буде виконана, коли даний успіхHandler або callHandler завершено. Це означає, що ви можете об'єднати обіцянки, коли у вас є набір асинхронних завдань, які потрібно виконати, і бути впевненим, що послідовність операцій гарантована так само, як якщо б ви використовували зворотні дзвінки. Таким чином, замість передачі зворотного дзвінка всередині зворотного дзвінка всередині зворотного дзвінка код з ланцюжковими обіцянками виглядає так:
var doStuff = firstAsyncFunction(url) {
return new Promise(function(resolve, reject) {
$.ajax({
url: url,
success: function(data) {
resolve(data);
},
error: function(err) {
reject(err);
}
});
};
doStuff
.then(secondAsyncFunction) //returns a promise
.then(thirdAsyncFunction); //returns a promise
Щоб дізнатися більше про обіцянки та чому вони надзвичайно круті, перегляньте блог Domenic: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/