Skip to main content
Toda operação assíncrona no Youka eventualmente é executada como uma tarefa, mas a superfície principal do SDK agora retorna handles de operação em vez de IDs de tarefa brutos. A maioria dos utilizadores deve usar client.projects.wait(...) ou client.exports.wait(...) e recorrer a client.tasks.* apenas quando precisar de inspeção de tarefas de baixo nível.

client.tasks.get(taskId, options?)

Obtém o estado atual de uma tarefa pelo ID.
const task = await client.tasks.get("tsk_abc123");
console.log(task.status, task.type);

Status de tarefa

StatusTerminal?Significado
createdNãoA tarefa foi criada, mas ainda não foi enfileirada.
queuedNãoA tarefa está aguardando para executar.
in-progressNãoA tarefa está em execução no momento.
completedSimA tarefa foi concluída com sucesso.
finalizedSimA tarefa foi concluída e o pós-processamento foi finalizado.
failedSimA tarefa falhou com um erro.
cancelledSimA tarefa foi cancelada.
timed-outSimA tarefa atingiu o limite de tempo.

client.tasks.wait(taskId, options?)

Faz polling de uma tarefa até que ela atinja um estado terminal. Retorna a tarefa final em caso de sucesso e lança YoukaTaskError em caso de falha.
const task = await client.tasks.wait("tsk_abc123", {
  pollIntervalMs: 3_000,
  signal: abortController.signal,
});

Opções

pollIntervalMs
number
Milissegundos entre polls. O padrão é 2000.
signal
AbortSignal
Cancela a espera. A requisição em andamento e qualquer atraso pendente são cancelados imediatamente.

Erros

client.tasks.wait(...) lança YoukaTaskError quando a tarefa termina em failed, cancelled ou 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?)

Aguarde a conclusão de uma operação no escopo do projeto e, em seguida, busque novamente o projeto. Retorna o handle da operação, a tarefa terminal e o projeto atualizado.
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
Normalmente, o resultado de client.projects.create(...), client.projects.separateStems(...) ou client.projects.syncLyrics(...).

client.exports.wait(operationOrId, options?)

Aguarde até que uma exportação na nuvem atinja um estado terminal. Passe o ExportOperation retornado por client.exports.create(...) ou uma string 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);

Cancelamento

Passe um AbortSignal para cancelar uma espera demorada:
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;
  }
}
O mesmo signal também cancela a requisição subjacente de polling de tarefas ou exportações.

O que vem a seguir

  • Errors — trate YoukaTaskError e erros passíveis de retry
  • Exports — aguarde a conclusão de uma exportação
  • API async jobs — o mesmo padrão em HTTP bruto