js htmlcollection içindeki butonlara click yapılması
class' ına göre aldığım bir dizi buton var. butonlara tıklandığında da ortaya çıkan inputlar var. sırasıyla butonlara tıklayıp çıkan inputlardan ikincisinin value sunu değiştirmek için aşağıdaki kodu kullandım ama istediğimi yapamadım.
async kullanmadan denediğimde hiçbir işlem yapmadı. async ile de rejected bir promise (inputlar undefined) döndü.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
Merhaba. Bu sayfadayken firebug console'u açıp aşağıdaki kodları yapıştırırsanız sizinkine benzer bir test ortamını bu sayfada oluşturabilirsiniz:
Kodu çalıştırdığınızda sayfanın üstünde sizinkiyle aynı class'a sahip 3 buton belirecek ve butonlara tıklandığında da sizinkilerle aynı class'lara sahip 4 input oluşacak.
Sizdeki kodları böylece simule ettikten sonra sizin yazdığınız kodu async/await olmadan yazıp çalıştırdım:
Sonuç olarak bütün butonlara basıldı ve input'lar oluştu ama sizde de olduğu gibi 2.input'a "deneme" yazmadı. Aynen sizin de düşündüğünüz gibi bir durum var. Aslında kodunuz doğru ama butona tıklandığında input'lar oluşturulması henüz tamamlanmadığı için input'u bulup değişiklik yapamıyordu.
Sonra sizin denediğiniz gibi async/await ile denedim:
Böyle yapınca da tıpkı sizdeki gibi bir Promise
döndü. Bu normal. Oluşturduğunuz fonksiyon async
olduğu için Promise
dönüyor. Promise sonucunu elde etmek için fonksiyonu çağırırken await
kullanmalısınız. Böylece fonksiyonunuz içindeki await
sonucu tamamlanmadan (butonlara tıklanma olayının işlemleri bitmeden) sonraki işlemlere geçmeyecektir.
Cevabı lüzumsuzca uzattıktan sonra :D aslında tek satırda verebileceğim cevap şu:
await degistir();
olarak deneyin.