Обещания используются для обработки асинхронных операций в JavaScript. Ими легко управлять при работе с несколькими асинхронными операциями, когда обратные вызовы могут создавать ад обратного вызова, приводящий к неуправляемому коду.
До обещаний использовались события и функции обратного вызова, но они имели ограниченные функциональные возможности и создавали неуправляемый код.
Несколько функций обратного вызова создадут ад обратного вызова, который приведет к неуправляемому коду. Кроме того, любому пользователю нелегко обрабатывать несколько обратных вызовов одновременно.
События плохо справлялись с асинхронными операциями.
Обещания являются идеальным выбором для простейшей обработки асинхронных операций. Они могут легко обрабатывать несколько асинхронных операций и обеспечивают лучшую обработку ошибок, чем обратные вызовы и события. Другими словами, мы также можем сказать, что обещания являются идеальным выбором для обработки нескольких обратных вызовов одновременно, что позволяет избежать нежелательной ситуации с обратным вызовом. Обещания действительно дают пользователю больше шансов прочитать код более эффективным и действенным способом, особенно если этот конкретный код используется для реализации нескольких асинхронных операций.
- Преимущества обещаний
- Улучшает Читаемость Кода
- Улучшенная обработка асинхронных операций
- Улучшенное определение потока управления в асинхронной логике
- Лучшая Обработка Ошибок
- Обещание имеет четыре состояния:
- fulfilled (выполнено): Действие, связанное с выполнением обещания, выполнено
- rejected (отклонено): Действие, связанное с невыполненным обещанием
- pending (ожидание): Обещание все еще не выполнено, т. е. еще не выполнено или отклонено
- settled (решено): Обещание выполнено или отклонено
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
Обещают Потребителям
Обещания могут быть использованы при регистрации функций с помощью .затем и .лови.
1. then()
then() вызывается, когда обещание либо выполнено, либо отклонено. Это также может быть определено как карьера, которая берет данные из обещания и в дальнейшем успешно его выполняет.
Параметры:
then() метод принимает в качестве параметров две функции.
- Первая функция выполняется, если обещание выполнено и получен результат.
- Вторая функция выполняется, если обещание отклонено и получена ошибка. (Это необязательно, и есть лучший способ обработки ошибок с помощью method catch()
Синтаксис:
.then(function(result){ //handle success }, function(error){ //handle error })
Пример: Обещание Выполнено
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
Примеры: Обещание Отклонено
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() метод принимает одну функцию в качестве параметра.
- Функция для обработки ошибок или отклонений обещаний.(.catch() метод внутренне вызывает .then(null, обработчик ошибок), т. е. .catch () — это просто сокращение для .then(null, обработчик ошибок) )
Синтаксис:
.catch(function(error){ //handle error })
Примеры: Обещание Отклонено
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
Примеры: Обещание Отклонено
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
Приложения
- Обещания используются для асинхронной обработки событий.
- Обещания используются для обработки асинхронных http-запросов.