You are currently viewing JavaScript Promises

JavaScript Promises

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

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

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

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

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

Приложения

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