Skip to main content
Jeder asynchrone Vorgang in Youka läuft letztlich als Aufgabe, aber die primäre SDK-Oberfläche liefert inzwischen Operation-Handles statt roher Task-IDs zurück. Die meisten Aufrufer sollten client.projects.wait(...) oder client.exports.wait(...) verwenden und nur dann zu client.tasks.* greifen, wenn sie eine Low-Level-Inspektion von Aufgaben benötigen.

client.tasks.get(taskId, options?)

Ruft den aktuellen Zustand einer Aufgabe anhand ihrer ID ab.
const task = await client.tasks.get("tsk_abc123");
console.log(task.status, task.type);

Aufgabenstatus

StatusTerminal?Bedeutung
createdNoAufgabe wurde erstellt, aber noch nicht in die Warteschlange gestellt.
queuedNoAufgabe wartet auf die Ausführung.
in-progressNoAufgabe wird gerade ausgeführt.
completedYesAufgabe wurde erfolgreich abgeschlossen.
finalizedYesAufgabe ist abgeschlossen und die Nachbearbeitung ist fertig.
failedYesAufgabe ist mit einem Fehler fehlgeschlagen.
cancelledYesAufgabe wurde abgebrochen.
timed-outYesAufgabe hat ihr Zeitlimit erreicht.

client.tasks.wait(taskId, options?)

Fragt eine Aufgabe so lange ab, bis sie einen terminalen Zustand erreicht. Gibt bei Erfolg die finale Aufgabe zurück, wirft bei Fehlern YoukaTaskError.
const task = await client.tasks.wait("tsk_abc123", {
  pollIntervalMs: 3_000,
  signal: abortController.signal,
});

Optionen

pollIntervalMs
number
Millisekunden zwischen den Abfragen. Standard ist 2000.
signal
AbortSignal
Bricht das Warten ab. Die laufende Anfrage und jede ausstehende Verzögerung werden sofort abgebrochen.

Fehler

client.tasks.wait(...) wirft YoukaTaskError, wenn die Aufgabe in failed, cancelled oder timed-out endet:
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?)

Wartet, bis eine projektbezogene Operation abgeschlossen ist, und lädt anschließend das Projekt erneut. Gibt das Operation-Handle, die terminale Aufgabe und das aktualisierte Projekt zurück.
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
Üblicherweise das Ergebnis von client.projects.create(...), client.projects.separateStems(...) oder client.projects.syncLyrics(...).

client.exports.wait(operationOrId, options?)

Wartet, bis ein Cloud-Export einen terminalen Zustand erreicht. Übergib entweder die von client.exports.create(...) zurückgegebene ExportOperation oder einen exportId-String.
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);

Abbrechen

Übergib ein AbortSignal, um ein lang laufendes Warten abzubrechen:
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;
  }
}
Dasselbe Signal bricht auch die zugrunde liegende Abfrage-Anfrage für Aufgaben oder Exporte ab.

Was kommt als Nächstes

  • ErrorsYoukaTaskError und wiederholbare Fehler behandeln
  • Exports — auf das Abschließen eines Exports warten
  • API async jobs — dasselbe Muster über reines HTTP