Skip to main content
كل عملية غير متزامنة في Youka تعمل في النهاية كمهمة، لكن واجهة الـ SDK الأساسية تُرجع الآن مقابض عمليات بدلًا من معرّفات مهام خام. ينبغي لمعظم المستخدمين استعمال client.projects.wait(...) أو client.exports.wait(...) وعدم اللجوء إلى client.tasks.* إلا عند الحاجة إلى فحص منخفض المستوى للمهمة.

client.tasks.get(taskId, options?)

اجلب الحالة الحالية لمهمة عبر المعرّف.
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;
  }
}
تُلغِي الإشارة نفسها أيضًا طلب الاستطلاع الأساسي للمهمة أو التصدير.

ما التالي