Sobes.tech
Middle+

/* Ի՞նչ կցուցադրվի կոնսոլում */ async function f() { console.log(1); const promise = new Promise((resolve) => { console.log(2); setTimeout(() => { console.log(3); resolve("պատրաստ!"); console.log(4); }); }); console.log(5); const result = await promise; console.log(6); console.log(result); return "Արդյունք"; } f(); console.log(7);

sobes.tech AI

Պատասխան AI-ից

Ելածքի հաջորդականությունը դիտարկենք կոնսոլում.

async function f() {
  console.log(1); // 1
  const promise = new Promise((resolve) => {
    console.log(2); // 2
    setTimeout(() => {
      console.log(3); // 3 (մոտ 0 մս)
      resolve("պատրաստ!");
      console.log(4); // 4
    });
  });
  console.log(5); // 5

  const result = await promise; // սպասում ենք խոստման լուծմանը
  console.log(6); // 6
  console.log(result); // "պատրաստ!"
  return "Արդյունք";
}

f();
console.log(7); // 7

Ելքի հերթականության բացատրություն:

  1. console.log(1); — սինխրոն
  2. console.log(2); — սինխրոն խոստում ստեղծելիս
  3. console.log(5); — սինխրոն խոստում ստեղծելուց հետո
  4. console.log(7); — սինխրոն f()-ի կանչից հետո

Հետո ակտիվանում է setTimeout (միկրոտասք):

  1. console.log(3);
  2. console.log(4);

Հաջորդը, երբ խոստումը լուծվում է resolve-ով, այն անցնում է fulfilled վիճակի, և await-ը շարունակում է գործարկումը:

  1. console.log(6);
  2. console.log(result); — ցույց է տալիս "պատրաստ!"

Ընդհանուր ելքի հերթականությունը:

1
2
5
7
3
4
6
պատրաստ!