Skip to main content
Cada operación asíncrona en Youka acaba ejecutándose como una tarea, pero la superficie principal del SDK ahora devuelve operation handles en lugar de IDs de tarea sin procesar. La mayoría de los casos de uso deberían emplear client.projects.wait(...) o client.exports.wait(...) y recurrir a client.tasks.* solo cuando necesiten inspección de tareas de bajo nivel.

client.tasks.get(taskId, options?)

Obtiene el estado actual de una tarea por ID.
const task = await client.tasks.get("tsk_abc123");
console.log(task.status, task.type);

Estados de tarea

Estado¿Terminal?Significado
createdNoLa tarea se creó pero aún no está en cola.
queuedNoLa tarea está esperando para ejecutarse.
in-progressNoLa tarea se está ejecutando actualmente.
completedLa tarea terminó correctamente.
finalizedLa tarea terminó y el posprocesamiento ya está hecho.
failedLa tarea falló con un error.
cancelledLa tarea fue cancelada.
timed-outLa tarea alcanzó su límite de tiempo.

client.tasks.wait(taskId, options?)

Sondea una tarea hasta que alcance un estado terminal. Devuelve la tarea final si tiene éxito y lanza YoukaTaskError si falla.
const task = await client.tasks.wait("tsk_abc123", {
  pollIntervalMs: 3_000,
  signal: abortController.signal,
});

Opciones

pollIntervalMs
number
Milisegundos entre sondeos. Por defecto, 2000.
signal
AbortSignal
Cancela la espera. La solicitud en curso y cualquier demora pendiente se cancelan inmediatamente.

Errores

client.tasks.wait(...) lanza YoukaTaskError cuando la tarea termina en failed, cancelled o 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?)

Espera a que finalice una operación con alcance de proyecto y, después, vuelve a obtener el proyecto. Devuelve el operation handle, la tarea terminal y el proyecto actualizado.
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, el resultado de client.projects.create(...), client.projects.separateStems(...) o client.projects.syncLyrics(...).

client.exports.wait(operationOrId, options?)

Espera a que una exportación en la nube alcance un estado terminal. Pasa el ExportOperation devuelto por client.exports.create(...) o una cadena 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);

Cancelación

Pasa un AbortSignal para cancelar una espera de larga duración:
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;
  }
}
La misma señal también cancela la solicitud subyacente de sondeo de tareas o exportaciones.

Qué sigue

  • Errors — gestiona YoukaTaskError y errores reintentables
  • Exports — espera a que termine una exportación
  • API async jobs — el mismo patrón en HTTP sin procesar