Premtet në stilin sinkron në JavaScript

Për të zgjidhur problemin e promise hell u shpik një sintaksë e veçantë e premtimeve, e cila lejon shkrimin e kodit asinkron shumë më lehtë - në stilin sinkron.

Le të fillojmë ta studiojmë atë. Për fillim le të marrim kodin nga mësimi i mëparshëm:

javascriptfunction func() {
  getSmth(2).then(res => {
    console.log(res); // do të shfaqë 4
  });
}

func();

Nëse funksioni ynë getSmth do të ishte sinkron, atëherë kodin e funksionit func ne do ta rishkruanim si më poshtë:

javascriptfunction func() {
  let res = getSmth(2);
  console.log(res); // do të shfaqë 4
}

Funksioni getSmth, megjithatë, është asinkron, prandaj kodi i paraqitur më sipër nuk do të funksionojë. Por, duke përdorur stilin sinkron të premtimeve, ne mund të marrim diçka të ngjashme. Le ta bëjmë këtë.

Për fillim ne duhet të deklarojmë funksionin tonë func si asinkron duke përdorur komandën speciale async:

javascriptasync function func() {
  
}

Pas kësaj, ne do të mundemi brenda funksionit func të përdorim komandën speciale await. Kjo komandë, e shkruar para një premtimi, do ta detyrojë JavaScript-in të presë derisa premtimi të përmbushet. Pas kësaj, komanda do të kthejë rezultatin e premtimit, dhe ekzekutimi i kodit do të vazhdojë.

Në rastin tonë, ne duhet të shkruajmë await përpara thirrjes së getSmth. Meqenëse rezultati i thirrjes së këtij funksioni do të jetë një premtim, atëherë ekzekutimi i mëtejshëm i kodit do të vazhdojë vetëm pas përmbushjes së atij premtimi. Epo, dhe rezultati i premtimit mund të ruhet në një variabël. Le të bëjmë atë që u përshkrua:

javascriptasync function func() {
  let res = await getSmth(2);
  console.log(res); // do të shfaqë 4
}

func();

Le ta thërrasim getSmth disa herë:

javascriptasync function func() {
  let res1 = await getSmth(2);
  let res2 = await getSmth(3);
  
  console.log(res1 + res2); // do të shfaqë 13
}

func();

E tani le ta thërrasim getSmth në një cikël:

javascriptasync function func() {
  let arr = [1, 2, 3, 4, 5];
  let sum = 0;
  
  for (let elem of arr) {
    sum += await getSmth(elem);
  }
  
  console.log(sum);
}

func();
Задание 1

Rishkruani kodin e mëposhtëm përmes sintaksës sinkrone:

javascriptfunction func() {
  getSmth(2).then(res1 => {
    getSmth(3).then(res2 => {
      getSmth(4).then(res3 => {
        console.log(res1 + res2 + res3);
      });
    });
  });
}

func();