مرکزی مواد پر جائیں
ماڈیول 8 · سبق 4 از 4کورس میں 32/32~15 min
ماڈیول اسباق (4/4)

چیلنج: وعدوں کے ساتھ شیڈولنگ

"شیڈیولنگ" کا مطلب ہے فیصلہ کرنا اسائنک کاموں کی فہرست کو کیسے چلایا جائے: سب ایک ساتھ، ایک وقت میں، یا چھوٹے گروپوں میں۔ ہم Promise.all، for await، اور بندش کو یکجا کریں گے۔

متوازی طور پر: سب ایک ساتھ

جب کام آزاد اور تیز ہوں تو ان سب کو لانچ کریں اور Promise.all کے ساتھ انتظار کریں:

JS
async function inParallelo(tasks) {
  return Promise.all(tasks.map((t) => t()));
}

const risultati = await inParallelo([
  () => Promise.resolve(1),
  () => Promise.resolve(2),
  () => Promise.resolve(3),
]);
// [1, 2, 3]

سست ترین کام کا کل وقت ≈ وقت۔

سیریز میں: ایک وقت میں ایک

جب ہر کام کا انحصار پچھلے ایک پر ہوتا ہے، یا آپ درجہ بندی کرنا چاہتے ہیں:

JS
async function inSerie(tasks) {
  const risultati = [];
  for (const t of tasks) {
    risultati.push(await t());
  }
  return risultati;
}

کُل وقت ≈ جمع اوقات کا۔

ہم آہنگی کی حد کے ساتھ

بعض اوقات آپ ایک ہزار ایک ساتھ درخواستیں نہیں چاہتے ہیں، لیکن آپ ان کا انتظار نہیں کرنا چاہتے سیریز یا تو: آپ ** پرواز میں زیادہ سے زیادہ N ** چاہتے ہیں۔

JS
async function conLimite(tasks, n) {
  const risultati = new Array(tasks.length);
  let i = 0;
  async function worker() {
    while (i < tasks.length) {
      const mio = i++;
      risultati[mio] = await tasks[mio]();
    }
  }
  await Promise.all(Array.from({ length: n }, worker));
  return risultati;
}

خیال: آپ n "کارکنان" کو لانچ کرتے ہیں جو اگلے انڈیکس کو پکڑتے ہیں جب تک کہ کچھ باقی نہ رہے۔

اسے آزمائیں

ورزش#js.m8.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

'inSeries(tasks)' async کی وضاحت کریں: وعدوں کو واپس کرنے والے فنکشنز کی ایک صف کو دیکھتے ہوئے، انہیں ایک وقت میں چلائیں (انتظار کریں) اور عمل درآمد کی ترتیب میں نتائج کی صف واپس کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

کے لئے ... اور دھکا (انتظار کریں)

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#js.m8.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

'inParallel(tasks)' async کی وضاحت کریں: وعدوں کو واپس کرنے والے فنکشنز کی ایک صف کو دیکھتے ہوئے، ان سب کو متوازی طور پر لانچ کریں اور ان پٹ کی ترتیب میں نتائج کی ایک صف واپس کریں۔ Promise.all استعمال کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

Promise.all(tasks.map((t) => t()))

3 کوششوں کے بعد حل دستیاب ہے۔