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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 827
  • Облачные технологии6 668
  • QA вакансии2 174
  • Android1 320
  • Инженер данных870
  • Продакт-менеджер317

Разработка

  • iOS1 233
  • Backend вакансии1 214
  • AI вакансии551
  • Fullstack вакансии502
  • Frontend вакансии425
  • Mobile вакансии28

По стеку

  • Go5 252
  • Java3 137
  • Kotlin1 125
  • Node.js1 011
  • Rust852
  • .NET665
  • PHP320
  • C++270
  • C#207

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

  • Kubernetes3 919
  • Linux-инфраструктура2 849
  • DevOps вакансии2 690
  • Terraform / IaC2 179
  • Мониторинг и Observability1 073
  • CI/CD914
  • SRE309
  • Кибербезопасность38

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

  • Аналитик данных529
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США25 969
  • Вакансии в Европе10 359
  • Работа в России3 634
  • Вакансии в Канаде2 280

По формату

  • Удалённые вакансии42 910
  • Релокация в США25 969
  • Гибридная работа5 672
  • Офисная работа4 498

По уровню

  • Senior вакансии22 658
  • Middle вакансии11 501
  • Junior вакансии3 898

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

Все компании
  • Rakuten189 вакансий
  • Wise188 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 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

Вакансии с этим навыком

JavaScript вакансии
  • HMI D&E Software- Delivery Line Manager - Hsinchu
  • QA Fullstack (C#)
  • Middle/Senior Full-Stack Python Engineer (Django) (#5841)
  • Senior .NET Fullstack Engineer( With Angular) (#5846)
  • Associate Manager, Engineering (Perforce IPLM)

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

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