تمرين إعادة البناء
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}`);
}
});اكتب هنا