v2.5.2
Giriş yap

for döngüsünü bekleme

selim
629 defa görüntülendi

Herkese merhaba,

Aşağıdaki kodumda console çıktısında önce 'Son kısım' daha sonra 'i' ile yazdırdığım kısım geliyo. Ben istiyorumki for döngüsü çalışsın bitsin daha sonra alttaki 'Son kısım' çalışsın.

Bunu nasıl yapabilirim ?

const arr = new Array(5)
for (let i = 0; i < arr.length; i++) {
	setTimeout(_ => {
  	console.log(i)
  }, 10)
}

console.log('Son kısım')
Cevap yaz
Cevaplar (6)
tayfunerbilen
1196 gün önce

bunu tam olarak ne için istiyorsun? mantıken for döngüsü içinde console'a bastığın için neye göre bekleyecek ki.
örneğin bu değerlerini promise olarak tutup Promise.all() ile altta kontrol edip işlem yapabilirsin

const arr = new Array(5)
let promises = []
for (let i = 0; i < arr.length; i++) {
    promises.push(new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(i)
            resolve(i)
        }, 20)
    }))
}

Promise.all(promises).then(values => {
    console.log('Son kısım');
    // values ile isterse promisden döndürdüğün değerlere burada da bir işlem yapabilirsin
})

bilmiyorum ne kadar mantıklı tabi yapmak istediğin şeyi söylersen daha farklı fikirler üretebiliriz

selim
1196 gün önce

@tayfunerbilen çok teşekkür ederim. Aradığım şey buydu.

selim
1196 gün önce

@webdevyusuf denedim fakat yine aynı. Sorun for döngüsünün beklememesi. Attığınız örnekteki async-await olayını bende denedim ama o şekilde de olmuyor

webdevyusuf
1196 gün önce
async function test() {
  const arr = new Array(5)
  for (let i = 0; i < arr.length; i++) {
    await setTimeout(async () => {
      await console.log(i)
    }, 10)
  }

  console.log('Son kısım')
}

test();
selim
1196 gün önce

@webdevyusuf cevap için teşekkürler ancak benim sorunum bu değildi. Sadece yukarıdaki kodda 2 console.log çıktısını sekron çalıştırmak istiyorum. Servis vs. kullanmıyorum.

webdevyusuf
1196 gün önce
let result = document.querySelector("#result");
fetch('https://jsonplaceholder.typicode.com/todos', {
  method: "get"
})
.then(res => res.text())
.then(async answer_text => {
  let answer = await JSON.parse(answer_text);
  await answer.forEach(item => {
    result.innerHTML += item.id + "<br />";
  });
  result.innerHTML += "test";
});

Bu kodu boş bir html sayfası aç (sunucuda) dene çalışıyor demo istersen:
https://codepen.io/takimmedya/pen/gOwRgRQ