Witam wszystkich serdecznie,
Napisałem sobie taki testowy kod, żeby zrozumieć działanie Promise.all. Efekt który chce uzyskać to objąć serię funkcji asynchronicznych Promise.all i po spełnieniu wykonać jeszcze raz tą serię. Docelowo w pętli wiele razy. Mam problem w zrozumieniu działania nastepującego kodu:
async function opoznioneWyswietlanie(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve("przekazany czas:" + time)
}, time);
})
}
async function seria(nazwaserii, dodatkowyCzas) {
let zwrot1 = await opoznioneWyswietlanie(1000+dodatkowyCzas);
console.log("zwrot1: " + zwrot1);
let zwrot2 = await opoznioneWyswietlanie(200 + dodatkowyCzas);
console.log("zwrot2: " + zwrot2);
return new Promise((resolve => {
resolve(`zakonczona seria: ${nazwaserii}`)
}))
}
const funkcjeAsynchroniczne = [seria("seriaPiersza",100), seria("seriaDruga",400)];
const sekwencyjnie = async function () {
for (const elem of funkcjeAsynchroniczne) {
var odp = await elem;
console.log(odp);
}
for (const elem of funkcjeAsynchroniczne) {
var odp = await elem;
console.log(odp);
}
}
const rownolegle = async function(){
let odp = await Promise.all(funkcjeAsynchroniczne)
console.log("Spełniona seria obietnic #1: "+odp);
let odp2 = await Promise.all(funkcjeAsynchroniczne)
console.log("Spełniona seria obietnic #2: " + odp2);
let odp3 = await Promise.all(funkcjeAsynchroniczne)
console.log("Spełniona seria obietnic #3: " + odp3);
}
// sekwencyjnie();
rownolegle();
Zrobiłem 2 warianty wywołania serii funkcji z tablicy funkcjeAsynchroniczne. Jedno zadanie po drugim 2 razy (funkcja sekwencyjnie) i wszystkie zadania rownolegle za pomocą Promise.all 3 razy (funkcja rownlolegle). Nie rozumiem dlaczego po pierwszej serii wywołań funkcja opoznioneWyswietlanie nie jest wywoływana. W każdym przypadku wywołuje się 4 razy a spodziewałem się, że odpowiednio dla sekwencyjnie(); wywoła się 8 razy, a dla rownlolegle(); 12 razy. Wszystkie obietnice zostają wypełnione z wyjątkiem tych z funkcji opoznioneWyswietlanie. Ktos potrafi to wyjaśnić ?