মূল কন্টেন্টে যান
মডিউল 7 · 3-এর পাঠ 4কোর্সে 27/32~14 min
মডিউল পাঠ (3/4)

আনয়ন (সিমুলেটেড)

একটি বাস্তব পৃষ্ঠায়, fetch(url) একটি সার্ভারকে কল করে৷ এখানে শেখার ব্রাউজারে আমরা পারি না বহিরাগত সার্ভারের সাথে কথা বলুন, তাই আমরা একটি "জাল" fetch ব্যবহার করব: পরীক্ষায়, a globalThis.fetch হল ইনজেকশন যা পূর্বনির্ধারিত ডেটা ফেরত দেয়, যাতে আপনি অনুশীলন করতে পারেন নেটওয়ার্কের উপর নির্ভর না করে যুক্তি।

আপনি যে API সম্পর্কে যত্নশীল তা আসলটির মতোই:

JS
const response = await fetch('/api/utenti');
const data = await response.json();

fetch(url) একটি প্রতিশ্রুতি প্রদান করে যা একটি Response অবজেক্টের সমাধান করে। Response.json() ফেরত দেয় বিশেষে পার্সড বডির সাথে একটি প্রতিশ্রুতি। তাই আপনাকে দুই অপেক্ষা করতে হবে।

সম্পূর্ণ উদাহরণ

JS
async function loadUsers() {
  const response = await fetch('/api/utenti');
  const users = await response.json();
  return users;
}

const list = await loadUsers();
// [{...}, {...}]

এটি সফল হয়েছে কিনা তা পরীক্ষা করা হচ্ছে

fetch নিক্ষেপ করে না যদি সার্ভার একটি ত্রুটি স্থিতি (404, 500) সহ প্রতিক্রিয়া জানায়। এটি এখনও আপনাকে দেয় একটি Response, কিন্তু ok: false এর সাথে:

JS
const r = await fetch('/api/utenti');
if (!r.ok) {
  throw new Error(`HTTP ${r.status}`);
}
const data = await r.json();

fetch শুধুমাত্র ছুড়ে দেয় যদি নেটওয়ার্ক ব্যর্থ হয় (কোন সংযোগ নেই, DNS, ...)।

সমান্তরালে একাধিক অনুরোধ: Promise.all

আপনার যদি N স্বাধীন কল করার প্রয়োজন হয়, সেগুলি একসাথে চালু করুন এবং Promise.all এর সাথে তাদের সকলের জন্য অপেক্ষা করুন:

JS
const [u, p] = await Promise.all([
  fetch('/api/utenti').then((r) => r.json()),
  fetch('/api/prodotti').then((r) => r.json()),
]);

ধারাবাহিকভাবে পরপর দুইটি await এর প্রায় দ্বিগুণ সময় লাগবে (সমষ্টি); সমান্তরালে এটা হয় সর্বাধিক দুটি (ধীরতম)।

চেষ্টা করে দেখুন

ব্যায়াম#js.m7.l3.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`loadUsers()` async সংজ্ঞায়িত করুন: call fetch('/api/utenti'), তারপর .json() ব্যবহারকারীদের অ্যারে পেতে, এবং এটি ফেরত দিন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

দুটি অপেক্ষা করছে: একটি আনতে, একটি .json() এ৷

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#js.m7.l3.e2
প্রচেষ্টা: 0লোড হচ্ছে...

`loadInParallel(urls)` async সংজ্ঞায়িত করুন: URL এর একটি অ্যারে পান, Promise.all এর সমান্তরালে প্রতিটিতে + .json() আনুন এবং একই ক্রমে প্রাপ্ত JSON মানগুলির একটি অ্যারে ফেরত দিন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

urls.map((u) => fetch(u) তারপর(r => r.json())) এবং Promise.all।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ