You are currently viewing JavaScript | Promises (Обещания)

JavaScript | Promises (Обещания)

Обещания используются для обработки асинхронных операций в JavaScript. Ими легко управлять при работе с несколькими асинхронными операциями, когда обратные вызовы могут создавать ад обратного вызова, приводящий к неуправляемому коду.

До обещаний использовались события и функции обратного вызова, но они имели ограниченные функциональные возможности и создавали неуправляемый код.
Несколько функций обратного вызова создадут ад обратного вызова, который приведет к неуправляемому коду. Кроме того, любому пользователю нелегко обрабатывать несколько обратных вызовов одновременно.
События плохо справлялись с асинхронными операциями.

Обещания являются идеальным выбором для простейшей обработки асинхронных операций. Они могут легко обрабатывать несколько асинхронных операций и обеспечивают лучшую обработку ошибок, чем обратные вызовы и события. Другими словами, мы также можем сказать, что обещания являются идеальным выбором для обработки нескольких обратных вызовов одновременно, что позволяет избежать нежелательной ситуации с обратным вызовом. Обещания действительно дают пользователю больше шансов прочитать код более эффективным и действенным способом, особенно если этот конкретный код используется для реализации нескольких асинхронных операций.

  • Преимущества обещаний 
    1. Улучшает Читаемость Кода
    2. Улучшенная обработка асинхронных операций
    3. Улучшенное определение потока управления в асинхронной логике
    4. Лучшая Обработка Ошибок
  • Обещание имеет четыре состояния: 
    1. fulfilled (выполнено): Действие, связанное с выполнением обещания, выполнено
    2. rejected (отклонено): Действие, связанное с невыполненным обещанием
    3. pending (ожидание): Обещание все еще не выполнено, т. е. еще не выполнено или отклонено
    4. 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() метод принимает в качестве параметров две функции.

  1. Первая функция выполняется, если обещание выполнено и получен результат.
  2. Вторая функция выполняется, если обещание отклонено и получена ошибка. (Это необязательно, и есть лучший способ обработки ошибок с помощью 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() метод принимает одну функцию в качестве параметра.

  1. Функция для обработки ошибок или отклонений обещаний.(.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

Приложения 

  1. Обещания используются для асинхронной обработки событий.
  2. Обещания используются для обработки асинхронных http-запросов.