Promises используются для обработки асинхронных операций в JavaScript. Ими легко управлять при работе с несколькими асинхронными операциями, когда обратные вызовы могут создавать ад обратного вызова, приводящий к неуправляемому коду.
До обещаний использовались события и функции обратного вызова, но они имели ограниченные функциональные возможности и создавали неуправляемый код.
Несколько функций обратного вызова создадут ад обратного вызова, который приведет к неуправляемому коду.
События плохо справлялись с асинхронными операциями.
Обещания являются идеальным выбором для простейшей обработки асинхронных операций. Они могут легко обрабатывать несколько асинхронных операций и обеспечивают лучшую обработку ошибок, чем обратные вызовы и события.
- Преимущества Promises
- Улучшает Читаемость Кода
- Улучшенная обработка асинхронных операций
- Улучшенное определение потока управления в асинхронной логике
- Лучшая Обработка Ошибок
- Promises имеет четыре состояния:
- выполнено: Действие, связанное с выполнением обещания, выполнено
- отклонено: Действие, связанное с невыполненным обещанием
- ожидание: Обещание все еще не выполнено, т. е. еще не выполнено или отклонено
- решено: Обещание выполнено или отклонено
- Promises может быть создано с помощью конструктора обещаний.
Синтаксис
var promise = new Promise(function(resolve, reject){
//do something
});
- Параметры
- Конструктор Promise принимает только один аргумент-функцию обратного вызова.
- Функция обратного вызова принимает два аргумента, разрешить и отклонять
- Выполните операции внутри функции обратного вызова, и если все прошло хорошо, то вызовите resolve.
- Если требуемые операции не проходят успешно, вызовите отклонение.
Пример
var promise = new Promise(function(resolve, reject) {
const x = "geeksforgeeks";
const y = "geeksforgeeks"
if(x === y) {
resolve();
} else {
reject();
}
});
promise.
then(function () {
console.log('Success, You are a GEEK');
}).
catch(function () {
console.log('Some error has occurred');
});
Выход:
Success, You are a GEEK
Promises потребителям
Promises могут быть использованы путем регистрации функций с использованием .then and .catch.
1. then()
then() вызывается, когда обещание либо разрешено, либо отклонено.
Параметры:
then() метод принимает две функции в качестве параметров.
- Первая функция выполняется, если обещание выполнено и получен результат.
- Вторая функция выполняется, если обещание отклонено и получена ошибка. (Это необязательно, и есть лучший способ обработки ошибок с помощью .catch() method
Синтаксис:
.then(function(result){ //handle success }, function(error){ //handle error })
Пример: Promises выполнено
var promise = new Promise(function(resolve, reject) {
resolve('Geeks For Geeks');
})
promise
.then(function(successMessage) {
//success handler function is invoked
console.log(successMessage);
}, function(errorMessage) {
console.log(errorMessage);
})
Выход:
Geeks For Geeks
Примеры: Promises отклонено
var promise = new Promise(function(resolve, reject) {
reject('Promise Rejected')
})
promise
.then(function(successMessage) {
console.log(successMessage);
}, function(errorMessage) {
//error handler function is invoked
console.log(errorMessage);
})
Выход:
Promise Rejected
2. catch()
catch() метод принимает одну функцию в качестве параметра.
Функция для обработки ошибок или отклонений обещаний.(.catch() метод внутренне вызывает .then(null, обработчик ошибок), т. е. .catch () — это просто сокращение для .then(null, обработчик ошибок) )
Синтаксис:
.catch(function(error){ //handle error })
Примеры: Promises отклонено
var promise = new Promise(function(resolve, reject) {
reject('Promise Rejected')
})
promise
.then(function(successMessage) {
console.log(successMessage);
})
.catch(function(errorMessage) {
//error handler function is invoked
console.log(errorMessage);
});
Выход:
Promise Rejected
Примеры: Promises отклонено
var promise = new Promise(function(resolve, reject) {
throw new Error('Some error has occurred')
})
promise
.then(function(successMessage) {
console.log(successMessage);
})
.catch(function(errorMessage) {
//error handler function is invoked
console.log(errorMessage);
});
Выход:
Error: Some error has occurred
Приложения
- Promises используются для асинхронной обработки событий.
- Promises используются для обработки асинхронных http-запросов.