Ответ
Ответ не найден
Ответ 18+ 🔞
Да ты посмотри на эту хуйню, блядь! Вот сидишь ты, значит, на работе, пишешь какой-нибудь код, а тут тебе приходит задача: "Сделай, чтобы при нажатии на кнопку 'Сохранить' данные уходили в три разных места". И ты такой: "Ну, окей, хули нет-то".
А потом открываешь документацию к этому новомодному хуилу, которое у вас в проекте используют, и там написано: "Для реализации паттерна 'Наблюдатель' используйте метод addListener(), передавая в него callback-функцию". И ты думаешь: "Ну, callback, callback, чё тут такого, обычная функция".
А потом начинаешь это всё писать, и выходит какая-то пиздецовая порнография:
button.addEventListener('click', function() {
saveToLocalStorage(data);
sendToServer(data, function(response) {
if (response.ok) {
updateUI(data);
logToAnalytics(data, function() {
console.log('Всё сохранилось, ёпта!');
});
} else {
showError('Всё пропало, блядь!');
}
});
});
Смотришь на эту хуйню и понимаешь — это же адский колбэк-хелл, мать его! Пять функций одна в другой, как матрёшки ебаные. И если в sendToServer ошибка вылезет, то вся цепочка накрывается медным тазом, а пользователь получит алерт "Всё пропало", но хуй поймёт, что именно.
И ты сидишь и думаешь: "Да ёпта, ну нахуй так жить? Это ж читать невозможно, а через месяц даже я, тот, кто это писал, буду смотреть на этот код и материться, как сапожник".
Вот поэтому и придумали Promise. Это же просто праздник какой-то, блядь! Вместо того чтобы вкладывать хуй в хуй, ты пишешь цепочку .then(). Выглядит это уже не так позорно:
button.addEventListener('click', () => {
saveToLocalStorage(data)
.then(() => sendToServer(data))
.then(() => updateUI(data))
.then(() => logToAnalytics(data))
.then(() => console.log('Всё сохранилось, ёпта!'))
.catch(() => showError('Чёт пошло не так, но уже не так страшно!'));
});
Уже лучше, правда? Всё по полочкам, последовательно. Ошибка в любом месте — и сразу прыгаем в catch. Красота!
Но и тут, блядь, нашлись умники, которым и этого мало. Говорят: "А давайте сделаем так, чтобы асинхронный код выглядел как синхронный!". И нате вам — async/await. Теперь можно писать вообще почти как в старые добрые времена:
button.addEventListener('click', async () => {
try {
await saveToLocalStorage(data);
await sendToServer(data);
await updateUI(data);
await logToAnalytics(data);
console.log('Всё сохранилось, ёпта!');
} catch (e) {
showError('Ошибка, но код-то читаемый!');
}
});
Смотришь на это и слёзы наворачиваются, блядь, от умиления. Всё прямо, понятно, ошибки ловятся в одном месте. Никаких тебе адских вложенностей, никакого колбэк-ада. Чистая магия, ёба!
Вот так, простым смертным разработчикам, жизнь сахаром не казалась, а тут — раз, и можно писать код, который не стыдно показать другим. Главное — не забывать async перед функцией и await перед промисом, а то опять получишь хуйню, а не результат.