Skip to main content
Каждая асинхронная операция в Youka в итоге выполняется как задача, но основная поверхность SDK теперь возвращает хэндлы операций вместо «сырых» ID задач. Большинству пользователей следует использовать client.projects.wait(...) или client.exports.wait(...) и обращаться к client.tasks.* только когда нужна низкоуровневая проверка задач.

client.tasks.get(taskId, options?)

Получить текущее состояние задачи по ID.
const task = await client.tasks.get("tsk_abc123");
console.log(task.status, task.type);

Статусы задач

СтатусТерминальный?Значение
createdНетЗадача создана, но ещё не поставлена в очередь.
queuedНетЗадача ожидает запуска.
in-progressНетЗадача выполняется в данный момент.
completedДаЗадача успешно завершилась.
finalizedДаЗадача завершилась, и постобработка выполнена.
failedДаЗадача завершилась с ошибкой.
cancelledДаЗадача была отменена.
timed-outДаЗадача достигла лимита по времени.

client.tasks.wait(taskId, options?)

Опрашивать задачу, пока она не перейдёт в терминальное состояние. При успехе возвращает итоговую задачу, при неудаче выбрасывает YoukaTaskError.
const task = await client.tasks.wait("tsk_abc123", {
  pollIntervalMs: 3_000,
  signal: abortController.signal,
});

Параметры

pollIntervalMs
number
Миллисекунды между опросами. По умолчанию 2000.
signal
AbortSignal
Прервать ожидание. Запрос «в полёте» и любая ожидающая задержка отменяются немедленно.

Ошибки

client.tasks.wait(...) выбрасывает YoukaTaskError, когда задача завершается в состоянии failed, cancelled или timed-out:
import { YoukaTaskError } from "@youka/sdk";

try {
  await client.tasks.wait("tsk_abc123");
} catch (error) {
  if (error instanceof YoukaTaskError) {
    console.error(error.code); // TASK_FAILED | TASK_CANCELLED | TASK_TIMED_OUT
    console.error(error.task); // Full RestTask payload
  }
  throw error;
}

client.projects.wait(operation, options?)

Дождаться завершения операции в рамках проекта, затем заново получить проект. Возвращает хэндл операции, терминальную задачу и обновлённый проект.
const operation = await client.projects.create({
  source: { type: "path", path: "./song.mp3" },
});

const { project, task } = await client.projects.wait(operation, {
  pollIntervalMs: 2_500,
});

console.log("Project ready:", project.id);
console.log("Task finished in state:", task.status);
operation
ProjectOperation
required
Обычно это результат client.projects.create(...), client.projects.separateStems(...) или client.projects.syncLyrics(...).

client.exports.wait(operationOrId, options?)

Дождаться, пока облачный экспорт не перейдёт в терминальное состояние. Передайте либо ExportOperation, возвращаемый client.exports.create(...), либо строку exportId.
const operation = await client.exports.create("prj_abc123", {
  resolution: "1080p",
  quality: "high",
});

const finalized = await client.exports.wait(operation, {
  pollIntervalMs: 3_000,
});

console.log(finalized.status, finalized.url);

Отмена

Передайте AbortSignal, чтобы отменить длительное ожидание:
const controller = new AbortController();

setTimeout(() => controller.abort(), 60_000);

try {
  await client.projects.wait(operation, { signal: controller.signal });
} catch (error) {
  if (error instanceof Error && error.name === "AbortError") {
    console.log("Wait cancelled after 60s");
  } else {
    throw error;
  }
}
Этот же сигнал также отменяет базовый запрос опроса задачи или экспорта.

Что дальше

  • Errors — обработка YoukaTaskError и ошибок, допускающих повтор
  • Exports — ожидание завершения экспорта
  • API async jobs — тот же паттерн в «сыром» HTTP