فرض کن باید از ۳ API مختلف اطلاعات بگیری:
const users = fetch("/api/users");
const posts = fetch("/api/posts");
const comments = fetch("/api/comments");اگر این درخواستها به هم وابسته نباشن، منطقی نیست یکی رو صبر کنیم تا تموم بشه و بعد سراغ بعدی بریم.
اینجا ()Promise.all کاربرد داره:
const [users, posts, comments] = await Promise.all([
fetch("/api/users"),
fetch("/api/posts"),
fetch("/api/comments")
]);
این Promiseها همزمان شروع میشن و وقتی همه با موفقیت تمام شدن، نتیجه رو دریافت میکنی.
---
اما یک نکته خیلی مهم 👀
اگر حتی یکی از Promiseها reject بشه، کل Promise.all() reject میشه:
const result = await Promise.all([
fetch("/api/users"),
fetch("/api/posts"),
fetch("/api/comments")
]);
مثلاً اگر درخواست posts شکست بخوره، result دریافت نمیشه؛ حتی اگر دو درخواست دیگه موفق شده باشن.
---
اگر میخوای نتیجه همه رو بگیری:
از ()Promise.allSettled استفاده کن:
const results = await Promise.allSettled([
fetch("/api/users"),
fetch("/api/posts"),
fetch("/api/comments")
]);
حالا میتونی ببینی هر درخواست چه وضعیتی داشته:
[
{ status: "fulfilled", value: ... },
{ status: "rejected", reason: ... },
{ status: "fulfilled", value: ... }
]
🔥 خلاصه:
Promise.all()→
همه باید موفق بشن.
Promise.allSettled()→
نتیجه تکتک Promiseها رو میگیری، حتی اگر بعضی شکست بخورن.
پس وقتی چند عملیات مستقل داری، قبل از اینکه همه رو پشت سر هم await کنی، به ()Promise.all فکر کن.
@CodeVerse_dev