Что было до Promise

Ответ

До появления Promise в JavaScript для асинхронного кода использовались колбэки (callback functions), что приводило к "аду колбэков" (callback hell) — вложенным и сложно читаемым структурам.

Пример с колбэками:

fs.readFile('file1.txt', 'utf8', (err, data1) => {
  if (err) throw err;
  fs.readFile('file2.txt', 'utf8', (err, data2) => {
    if (err) throw err;
    console.log(data1 + data2);
  });
});

Также существовали библиотеки (например, async.js), которые упрощали работу с асинхронностью, но не решали проблему полностью. Позже появились Deferred (jQuery) и генераторы, но они были нестандартными или сложными. Promise (ES6) решили эти проблемы, предоставив цепочки .then() и .catch().

Ответ 18+ 🔞

Эх, ну и времена были, блядь! До того, как эти ваши Промисы нарисовались, в асинхронном коде творился натуральный пиздец, ёпта. Ад колбэков, сука, реальный — вот как это называлось. Представь себе: один колбэк в другом, тот в третьем, и всё это лесенкой вправо уезжает, пока глаза не начнут косить. Читать такое — терпения ноль ебать.

Вот, смотри, как раньше мучались, чтобы два файла прочитать:

fs.readFile('file1.txt', 'utf8', (err, data1) => {
  if (err) throw err;
  fs.readFile('file2.txt', 'utf8', (err, data2) => {
    if (err) throw err;
    console.log(data1 + data2);
  });
});

Видишь эту пирамиду, блядь? Это ж чистой воды пиздопроебина! Ошибка на ошибке, вложение во вложение. И если там не два файла, а пять, так это вообще лес, в котором заплутаешь нахуй.

Народ, конечно, не сидел сложа руки. Вылезали разные библиотеки-костыли, типа async.js — они вроде как помогали эту кашу разгребать, но всё равно чувствовалось, что это костыль, а не решение. А ещё были эти Deferred от jQuery — ну, манда с ушами, если честно, свой велосипед, который только своих фанатов понимал.

Потом, блядь, начали экспериментировать с генераторами — идея вроде ничего, но сложновато, мозг выносит. А потом, наконец, как гром среди ясного неба — Промисы в ES6, ёба! Вот это уже поворот, ядрёна вошь!

Пришли они и навели марафет: цепочки .then(), ловля ошибок в одном .catch(), красота! Всё ровненько, читаемо, без этих лестниц в ад. Словно после подвала вышел на свежий воздух, в рот меня чих-пых!