AzLearn

تمرين إعادة البناء

Promise Task Runner

أعد كتابة مشغل مهام TypeScript يجمع نتائج Promise بنوع واضح.

typescript ~15 دقيقة متوسط
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
type TaskResult<T> =
  | { name: string; ok: true; value: T }
  | { name: string; ok: false; error: string };

interface Task<T> {
  name: string;
  run(): Promise<T>;
}

async function runTask<T>(task: Task<T>): Promise<TaskResult<T>> {
  try {
    return { name: task.name, ok: true, value: await task.run() };
  } catch (error: unknown) {
    return {
      name: task.name,
      ok: false,
      error: error instanceof Error ? error.message : "Unknown error",
    };
  }
}

async function runTasks<T>(tasks: Task<T>[]): Promise<TaskResult<T>[]> {
  return Promise.all(tasks.map(runTask));
}

const tasks: Task<number>[] = [
  { name: "double", run: async () => 21 * 2 },
  { name: "square", run: async () => 7 * 7 },
];

runTasks(tasks).then((results) => {
  for (const result of results) {
    console.log(result.ok ? `${result.name}: ${result.value}` : `${result.name}: ${result.error}`);
  }
});
اكتب هنا