Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 412новых вакансий за сутки·55 411вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 671
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

DevOps и инфраструктура

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

Аналитика и данные

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

Другие направления

  • Проджект-менеджер103
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме JavaScriptВсе вопросы
JavaScriptMiddleТеория

Что такое Promise? Чем они отличаются от callback'ов?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Promise — объект для асинхронного результата с тремя состояниями (pending/fulfilled/rejected). В отличие от callback, даёт плоские цепочки .then(), единый .catch() и удобную композицию через Promise.all/race/any.

Callback: исходная модель

До появления Promise (ES2015) асинхронность строилась на колбэках — функциях, передаваемых в качестве аргументов и вызываемых по завершении операции. Узнаваемый паттерн Node.js — error-first callback:

fs.readFile('data.json', 'utf8', (err, data) => {
  if (err) {
    console.error('Ошибка:', err);
    return;
  }
  JSON.parse(data, (parseErr, obj) => { // callback hell начинается здесь
    if (parseErr) {
      console.error('JSON error:', parseErr);
      return;
    }
    saveToDb(obj, (dbErr, result) => {
      if (dbErr) { /* ещё уровень */ }
      // ...
    });
  });
});

Promise в JavaScript

Promise — объект, представляющий результат асинхронной операции, которая ещё не завершилась. Он может находиться в одном из трёх состояний:

  • pending — операция выполняется
  • fulfilled — операция завершилась успешно, есть значение
  • rejected — операция завершилась с ошибкой, есть причина

Переход из pending в fulfilled или rejected необратим.

Promise: решение проблем callback

// Тот же поток с промисами
fs.promises.readFile('data.json', 'utf8')
  .then(data => JSON.parse(data))
  .then(obj => saveToDb(obj))
  .then(result => console.log('Saved:', result))
  .catch(err => console.error('Ошибка:', err)); // одна точка обработки ошибок

async/await — синтаксический сахар над Promise

async function processFile() {
  try {
    const data = await fs.promises.readFile('data.json', 'utf8');
    const obj = JSON.parse(data);
    const result = await saveToDb(obj);
    console.log('Saved:', result);
  } catch (err) {
    console.error('Ошибка:', err);
  }
}

Создание Promise вручную

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

function fetchWithRetry(url, retries = 3) {
  return new Promise(async (resolve, reject) => {
    for (let i = 0; i < retries; i++) {
      try {
        const res = await fetch(url);
        if (!res.ok) throw new Error(`HTTP ${res.status}`);
        return resolve(await res.json());
      } catch (err) {
        if (i === retries - 1) reject(err);
        else await delay(1000 * 2 ** i); // экспоненциальный backoff
      }
    }
  });
}

Ключевые отличия от callback

  • Единая обработка ошибок — один .catch() покрывает всю цепочку, вместо проверки if (err) на каждом уровне.
  • Компонуемость — Promise.all, race, any, allSettled для параллельного выполнения; callback-и требуют ручного счётчика.
  • Нет «callback hell» — цепочка .then() линейна; глубокая вложенность заменяется плоским кодом.
  • Гарантированный async — обработчик .then() всегда вызывается асинхронно (как микрозадача), даже если промис уже fulfilled; callback может быть вызван синхронно.
  • Состояние хранится — к fulfilled промису можно подключить .then() в любой момент и получить значение; callback вызывается ровно один раз и значение теряется.

Promisification — обёртка над callback API

const { promisify } = require('util');
const readFile = promisify(require('fs').readFile);

// Теперь readFile возвращает Promise
const content = await readFile('file.txt', 'utf8');

// Вручную
function promisifyCallback(fn) {
  return (...args) => new Promise((resolve, reject) => {
    fn(...args, (err, result) => {
      if (err) reject(err);
      else resolve(result);
    });
  });
}

Подводные камни

  • Проглоченные ошибки — Promise без .catch() тихо поглощает исключения; в Node.js ≥15 это завершает процесс с unhandledRejection.
  • new Promise(async executor) — async-функция в конструкторе Promise опасна: брошенное исключение внутри не попадёт в reject промиса, а уйдёт в unhandledRejection.
  • return в .then() — забытый return прерывает цепочку: следующий .then() получит undefined вместо нужного значения.
  • Смешивание async/await и .then() — технически корректно, но создаёт путаницу; выбирайте один стиль в рамках функции.
  • Promise не отменяемый — нет встроенной отмены; используйте AbortController + AbortSignal для fetch и других отменяемых операций.
  • await в цикле — for...of с await выполняет итерации последовательно; для параллельного выполнения нужен Promise.all(items.map(...)).
  • Ошибки после resolve/reject — если в executor выбросить исключение после вызова resolve, оно проигнорируется; Promise уже settled.

Типичные ошибки

  • Смешивать «Promise» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «Promise» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

Что проверяет интервьюер

  • Объясняет композиция асинхронного результата и отличие от callback-цепочек.
  • Показывает на примере, как работает: Promise представляет будущий результат в состояниях pending, fulfilled или rejected и позволяет строить цепочки с единым каналом ошибок вместо ручной передачи callback-функций.
  • Называет production-нюанс и граничный случай для темы «Promise».

Как вы знаете этот вопрос?

Проверить себя по теме JavaScript →

Источники

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
←Предыдущий вопросВ чём разница между `var`, `let` и `const`? Как hoisting влияет на каждое из них?Следующий вопрос→Для каких задач JavaScript является сильным выбором, а где лучше честно выбрать другой язык?

Связанные темы

JavaScriptasync-programmingerror-handling

Частые вопросы на собеседовании

  • Как защититься от XSS в браузерном приложении? Где помогают CSP, escaping и Trusted Types?
  • В чём разница между var, let и const? Как hoisting влияет на каждое из них?
  • Для каких задач JavaScript является сильным выбором, а где лучше честно выбрать другой язык?
  • Как работает event loop в JavaScript? Что такое call stack и task queue?