[]

nodejs yardım

kendimce bişeyler yapmaya çalışıyorum ama takıldığın yerler var.

öncelikle mongodb'de araba, marka, model, fiyat datalarını tutuyorum diyelim.

önce araba markalarına göre gruplayıp bunu bi değişkene atmak istiyorum. Sonra buradaki markalara göre tek tek loop içinde dönerken o markaya ait mongodb'deki tüm kayıtları getirip belli hesaplar yapacağım. sonra da yaptığım tüm hesapları bi değişkene atayıp o değişkeni de mongodb'de başka bir tabloya yazmak istiyorum.

fakat burada işlemleri async yapmak gerekiyor galiba. yoksa bir işlem bitmeden diğerine geçiyor ve doğru dataları elde edemiyorum. araba markalarını gruplayan fonksiyonumu async olarak tanımlıyorum fakat içindeki değeri return etmek istediğimde, fonksiyonu çağırdığımda undefined olarak gelmekte. bu async olayını anlamakta zorluk çekiyorum açıkçası.

umarım anlatabilmişimdir. yardım edebilecek varsa çok makbule geçer

 
Javascript async await anahtar kelimeleriyle google'da aratırsan onlarca yazı bulabilirsin aslında.

Async olarak tanımlanmış her fonksiyon Promise döndürür. Promise'teki veriyi okumak için ya .then metodunu ya da await ifadesini kullanman gerekiyor. Undefined dönen şey aslında return ettiğin şey değil. Return ettiğin şey bir Promise objesi. Sen muhtemelen data.cars gibi propertysine erişmeye çalıştığın için undefined alıyorsun.
  • IncredibleMau  (26.05.20 01:57:55) 
@IncredibleMau +1, sorunun kaynağı o. DB'ye isteği atıyorsun, ama daha cevap gelmeden cevabın bir property'sine ulaşmaya çalışıyorsun, o da hata veriyor. Await ile bekleyebilir ya da .then kullanarak callback'ten sonuca erişebilirsin.

Örneğin:

await const cars = func getCars() { return mongo.get("..query..") }

ya da

const cars = func getCars() { return mongo.get("..query..") }
cars.then(result => {....})

gibi.

Bundan sonra loop'ta gezip bir sürü istek atıyorsan orada da Promise.all() kullanabilirsin. Ama onun yerine yapacağın tüm işlemi tek bir query ile mongo üzerinde halletsen (aggregation diye bak daha iyi.
  • plutongezegendegilmi  (26.05.20 09:46:29 ~ 09:46:51) 
ayrica bu sadece node.js problemi degil mongodb problemi. mongodb de veri yazdiktan hemen sonra ayni veriyi okumaya kalkarsan undefined donecektir. cunku mongodb bir veri yazildiginda aninda yazilacagi garantisini vermiyor. yazma emrini verdikten bir sure sonra yazma islemi gerceklesiyor ve o arada mongodb cache gibi birkac is yapiyor.

kaynak: blog.meteor.com
  • emrahday  (26.05.20 15:34:29) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.