Ответ
Ответ не найден
Ответ 18+ 🔞
А, ну это же классика, блядь! Сейчас объясню, как там всё устроено, только не ори, что я тебе мозги пудрю. Смотри, есть у нас в JavaScript такая штука — Promise. Представь, что ты пообещал другу привезти ему пива, но не сейчас, а когда с работы выйдешь. Вот это и есть промис — обещание сделать что-то в будущем.
Вот как это выглядит в коде, не пугайся:
let promiseToBringBeer = new Promise(function(resolve, reject) {
// Тут мы как бы "работаем"
let hasBeer = true; // Допустим, пиво мы купили
if (hasBeer) {
resolve('Пиво в холодильнике, братан!'); // Обещание выполнено — всё ок!
} else {
reject('Ёпта, магазин закрылся...'); // Обещание не выполнено — всё пиздец
}
});
Видишь? Создали промис. Внутри него какая-то хуйня происходит, которая может затянуться. А потом он либо резолвится (выполняется), либо реджектится (отклоняется с пиздюлиной).
Ну и что с этим делать? А вот что:
promiseToBringBeer
.then(function(successMessage) {
// Всё заебись, промис выполнился
console.log('Ура! ' + successMessage); // Выведет: "Ура! Пиво в холодильнике, братан!"
})
.catch(function(errorMessage) {
// Всё пиздец, промис отклонился
console.log('Бля... ' + errorMessage); // Выведет: "Бля... Ёпта, магазин закрылся..."
});
.then() ловит успех, .catch() — ошибку. Всё просто, как три копейки.
А теперь смотри, где вся соль. Асинхронщина, ёпта! Промисы позволяют не ждать, пока какая-то долгая операция (запрос на сервер, чтение файла) выполнится, а спокойно делать другие дела, а потом уже отреагировать на результат. Без них пришлось бы писать адские колбэки, в которых хуй разберёшься — так называемый «ад колбэков» или «callback hell». Выглядит это пиздец как страшно:
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
console.log('Получилось: ' + finalResult);
}, failureCallback);
}, failureCallback);
}, failureCallback);
А с промисами — красота, цепочка, читается легко:
doSomething()
.then(result => doSomethingElse(result))
.then(newResult => doThirdThing(newResult))
.then(finalResult => {
console.log(`Получилось: ${finalResult}`);
})
.catch(failureCallback); // И одна ошибка на всех!
Главное — не забывай return в .then(), а то следующий в цепочке получит undefined, и сам потом охуеешь, где потерял данные.
И да, современный синтаксис async/await — это просто сахар над промисами, чтобы код выглядел как синхронный. Но под капотом — всё те же самые промисы, так что без них нихуя не понять. Так что разберись с этой хуйнёй, а потом уже лезь в async/await, а то будешь как мартышка с гранатой.