@Extazzzi

Промисификация функций callback?

Здравствуйте, вопрос таков. Промисификация нужна для того чтобы использовать функции-потребители .then .catch .finally?
  • Вопрос задан
  • 806 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
Советую изучить раздел о Промисах, промисификация последней главой. Промисы нужны чтобы писать асинхронный код, вот даже пример:
Пример 1

function get(url, callback) {
	const request = new XMLHttpRequest();

	request.addEventListener('load', function (event) {
		try {
			const data = JSON.parse(request.response);

			callback(data);
		} catch (error) {
			callback(request.response);
		}
	});

	request.open('GET', url);
	request.send();
}

get('https://jsonplaceholder.typicode.com/todos', function (data) {
	console.log(data);
});


А теперь представьте, что вам надо загрузить несколько таких JSON'ок, и после загрузки всех, что-то сделать:
get('URL_1', function (data_1) {
	get('URL_2', function (data_2) {
		get('URL_3', function (data_3) {
			// do something
		});
	});
});

Неудобно, не правда ли? Но если перевести этот код в Промисы, становится намного проще
Пример 2

function get(url) {
	return new Promise(function (resolve, reject) {
		const request = new XMLHttpRequest();

		request.addEventListener('load', function (event) {
			try {
				const data = JSON.parse(request.response);

				resolve(data);
			} catch (error) {
				resolve(request.response);
			}
		});

		request.addEventListener('error', function (event) {
			reject({
				status: request.status,
				text: request.statusText
			});
		});

		request.open('GET', url);
		request.send();
	});
}

Promise.all([
	get('URL_1'),
	get('URL_2'),
	get('URL_3')
]).then(function ([data_1, data_2, data_3]) {
	// do something
});


Промсификация призвана упростить перевод callback-функций в их promise вариант.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект