[JS] Düz Fonksiyonda Await Kullanımı
-
merhaba muritler
kullanıdıgım bir NodeJs kutaphanesınde aşağıdakı gıbı bır kod var
write(params, ...moreParams) { params = this.concatParams(params, moreParams); let chann = this.openChannel(); this.holdConnection(); chann.once('close', () => { chann = null; // putting garbage collector to work :] this.decreaseChannelsOpen(); this.releaseConnectionHold(); }); return chann.write(params); }
ben bu kodu şağıdakı gıbı bır durumda kullanıyorum.
Bilgi.Arayuz.forEach((item) => { if (item['type'] == 'ether') { client.write('/interface/ethernet/get','=number='+item['Adi'],'=value-name=speed').then(data1 => { item.Speed=data1[0]['ret']; console.log(data1[0]['ret']); }) console.log('11.'); } });
buradakı sıkıntım foreachla satırları kontrol edıp eger if kosuluma uyan varsada write kodunu calıstıyoruyum ve cıkan sonucu aynı satırada speed degerıne yazmaya calısıyorum ama
kodlar wire fonksoıyonu beklemedıgı ıcın bos deger gelıyor
google aradım Promise olayını gordum fakat mevcut yapımda calıstıramadım
bunu calıstırmabılmek ıcın nasıl bır yol ızlıyebılırım.
-
const myFunction =async (elements) => { for (let i = 0; i < elements.length; i++) { const item=elements[i]; if (item.type == 'ether') { const result = await client.write('/interface/ethernet/get', `=number=${item.Adi}`, '=value-name=speed'); item.Speed = result[0].ret; console.log(result[0].ret); } } } myFunction(Bilgi.Arayuz);
Edit : Write fonksiyonnuu asenkrona çekmen lazım. Promise olmamalı.
-
MhmdAlmz bunu yazdı
hocam bunu denedım asagıdakı gıbı bır hata verıyor
await is only valid in async function
-
lazz bunu yazdıMhmdAlmz bunu yazdı
hocam bunu denedım asagıdakı gıbı bır hata verıyor
await is only valid in async function
hocam write fonksiyonunu da async çekmen lazım. Aynı mantıkta. Buradaki channel de promise değilse işin yaş taa en başa gitmen lazım.
Bu fonksiyonlar ya promise yada async olmalı yoksa olmaz hocam.
-
Hocam client.write zaten promise dönüyor(kütüphaneyi bilmiyorum ama metodu çağırıp sununda then ile resolve göndermenden belli.)
bir async metod yapıp içersindeki promise'leri await ile kullanabailirsin.
-
foreach asenkron bir fonksiyon değildir hocam,
bu tarz projelerde asyncForEach kullanmanı öneririm
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
örn:
asyncForEach(Bilgi.Arayuz, (item) => {
....
})
-
yunusemre bunu yazdı
foreach asenkron bir fonksiyon değildir hocam,
bu tarz projelerde asyncForEach kullanmanı öneririm
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
örn:
asyncForEach(Bilgi.Arayuz, (item) => {
....
})
hocam bunu yarın bir denicem
digerlerini denedim
ama çalısmıyolar kutuphane hazır bır kutuphane ordakı kodlara bakınca connect diye bir parametre var onda promise var ama bunda kullanmamıs :(