Какое семейное положение

Ответ

Ответ не найден

Ответ 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 перед промисом, а то опять получишь хуйню, а не результат.