В каких ситуациях в Java происходит автоматическое преобразование Integer в int

Ответ

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

Ответ 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, а то будешь как мартышка с гранатой.