




Javascript Fonksiyon İçinde Global Değişken Yardım
-
javascriptte fonksiyon içinde atadağım değişkeni fonksiyon dışına almakta sorun yaşıyorum elbette mantıken öyle birşey olmaması gerekiyor ama yapmak istediğim o javascriptte bu konuda kafam basmıyor bir türlü.
a ve b noktam var bunların latlonglarını almam gerekiyor bunun için de
geocoder.geocode({'address': aNoktasix},function(results,status){ if (status == google.maps.GeocoderStatus.OK){ alert(results[0].geometry.location.lat()+", "+results[0].geometry.location.lng()) } }); geocoder.geocode({'address': bNoktasix},function(results,status){ if (status == google.maps.GeocoderStatus.OK){ alert(results[0].geometry.location.lat()+", "+results[0].geometry.location.lng()) } });
bunları kullanıyorum. sonuçlar kendi içinde gayet güzel alert dönüyor ama bu iki sonucu ayrı ayrı yeniden fonksiyon dışına çıkarmak zorundayım bunu nasıl yapıyoruz?
-
En basiti taşıyacağın değişkeni window nesnesi üzerinde oluşturman. Örneğin
geocoder.geocode({'address': aNoktasix},function(results,status){ if (status == google.maps.GeocoderStatus.OK){ window.geocode1 = results[0].geometry.location.lat()+", "+results[0].geometry.location.lng(); alert(results[0].geometry.location.lat()+", "+results[0].geometry.location.lng()) } });
geocoder.geocode({'address': bNoktasix},function(results,status){ if (status == google.maps.GeocoderStatus.OK){ window.geocode2=results[0].geometry.location.lat()+", "+results[0].geometry.location.lng(); alert(results[0].geometry.location.lat()+", "+results[0].geometry.location.lng()) } }); alert(window.geocode1 + " " + window.geocode2);Tabi daha düzgün sonuç şu adreste: https://stackoverflow.com/a/6847754
-
Senkronizasyon durumu nedir ? Senkron mu bu asenkron mu ? Asenkron ise anında cevap alamazsın ki ? Senkron ise üste bi değişken yaz alttan çekersin gene ? Ne gibi bir sıkıntı olabilir ki ?
-
asenkron değil senkron sanıyorum onu da bilmiyorum :B
şimdi örneklerde hep callback kullanın denmiş bir örnek buldum
function getLocationData(location, callback) { geocoder = new google.maps.Geocoder(); if( geocoder ) { geocoder.geocode({ 'address': location }, function (results, status) { if( status == google.maps.GeocoderStatus.OK ) { callback(results[0].geometry.location.lat() + " " +results[0].geometry.location.lng()); } }); } } getLocationData(aNoktasix, function(locationData) { console.log(locationData); });
şeklinde consola bastırıyorum ama bunu yine değişkene alamıyorum :s bişey değişmedi yani.
window nesnesi undefined döndürüyor işe yaramadı
-
O zaman asenkron (fena saçmalamışım, özür dilerim).
-
geçici olarak jquery ile elementlere data atayıp sonra yeniden çektirme yaptırdım ama yani ne bileyim bu kadar zor olmamalıydı :D
-
Aynen, bu kadar zor. C# falan olsa await kullanırsın ama burada promiseler var. Callbacklerden çok farklı değil.
Async metodların ne zaman cevap döndüreceği belli değil. Ayrı bir thread ya da task gibi düşünebilirsin. Yani başlatıyorsun, kendi kendine çalışıyor, belirsiz bir zamanda (hatalı/hatasız) sonlanıyor. Bloklu olmadığı için ise geri dönüş yapabilmesine rağmen bir anlamı olmuyor.
Hidden inputlar kullanılabilir base64 şeklinde veriyi taşımak için.
Mesela promise ile yapılan örnek:
function getAddress(address) { return new Promise(function (resolve, reject) { var geocoder = new google.maps.Geocoder(); geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var latitude = results[0].geometry.location.lat(); var longitude = results[0].geometry.location.lng(); resolve(latitude + ";" + longitude); } }); }); }; a = getAddress('ANKARA') .then(function(v){return v; console.log(v);}) .catch(function(v){}); console.log(a);
-
hah bu güzelmiş :D teşekkürler hocam yeni birşey daha öğrenmiş olduk