0Pricing
TypeScript Academy · Урок

Шаблоны конкурентного выполнения (all/settled/race): типы

Моделируйте конкурентное выполнение с помощью Promise.all / allSettled / race, разбирайтесь с типами результатов и создавайте безопасные вспомогательные функции.

«Шаблоны конкурентного выполнения (all/settled/race): типы» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.

Введение

Цель: запускать задачи одновременно с помощью Promise.all, обрабатывать смешанные результаты через allSettled и использовать race для ограничения времени ожидания и запасных вариантов. Изучите возвращаемые ими типы.

all: типы кортежей

Promise.all с кортежем сохраняет типы и порядок элементов; каждый элемент автоматически преобразуется во внутренний тип.

async function one(): Promise<number> { return 1 }
async function two(): Promise<string> { return "two" }

async function runAll() {
  const [a, b] = await Promise.all([one(), two()]);
  // a: number, b: string
  console.log(a + 1, b.toUpperCase());
}

runAll();

all: параллельное отображение

Сначала запустите несколько задач, а затем дождитесь их вместе с помощью await. В данном случае Promise.all возвращает string[].

async function fetchItem(id: number): Promise<string> {
  return `item-${id}`;
}

async function getMany(ids: number[]): Promise<string[]> {
  const tasks = ids.map(id => fetchItem(id)); // start all
  return Promise.all(tasks); // await all
}

getMany([1,2,3]).then(xs => console.log(xs));

Типизация allSettled

allSettled никогда не отклоняет Promise; он возвращает массив объектов результатов — успешных или отклонённых, — тип которых можно уточнить по status.

async function mightFail(n: number): Promise<number> {
  if (n % 2 === 0) return n; else throw new Error("odd")
}

async function runSettled() {
  const results = await Promise.allSettled([mightFail(1), mightFail(2)]);
  for (const r of results) {
    if (r.status === "fulfilled") {
      // r: PromiseFulfilledResult<number>
      console.log("ok", r.value);
    } else {
      // r: PromiseRejectedResult
      console.warn("fail", r.reason);
    }
  }
}

runSettled();

race и ограничение времени ожидания

race завершается успешно или с ошибкой в зависимости от первого завершившегося Promise. Объединяйте его с ограничением времени ожидания, чтобы ограничить задержку.

function timeout<T>(ms: number, msg = "Timeout"): Promise<T> {
  return new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));
}

async function slow(): Promise<string> { return new Promise(res => setTimeout(() => res("done"), 100)); }

async function withTimeout() {
  const result = await Promise.race<Promise<string>>([
    slow(),
    timeout<string>(50, "Too slow"),
  ]);
  console.log(result);
}

withTimeout().catch(e => console.error("raced:", e.message));

Советы и выбор метода

Советы:

  • all: сбор результатов с немедленным завершением при ошибке.
  • allSettled: сбор успешных результатов и ошибок без выбрасывания исключения.
  • race: ограничение времени ожидания и запасные варианты; явно задавайте типы элементов.

Проверка типизации Promise.all

Быстрая проверка: какое утверждение о типизации Promise.all является TRUE?

Итоги

Итоги: используйте all для типизированного параллельного выполнения, allSettled для проверки всех результатов и race для ограничения времени ожидания — учитывайте структуры, которые возвращает каждый API.

Часто задаваемые вопросы

Урок «Шаблоны конкурентного выполнения (all/settled/race): типы» бесплатный?

Да — полный текст урока «Шаблоны конкурентного выполнения (all/settled/race): типы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «Шаблоны конкурентного выполнения (all/settled/race): типы»?

Моделируйте конкурентное выполнение с помощью Promise.all / allSettled / race, разбирайтесь с типами результатов и создавайте безопасные вспомогательные функции. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Шаблоны конкурентного выполнения (all/settled/race): типы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Promise , типизация async/await
  2. Типизация ошибок (unknown), сужение типов в catch
  3. Шаблоны конкурентного выполнения (all/settled/race): типы
← Назад к TypeScript Academy