SO'ya bu soru sorulmuştur. Ama yine de bir şey alamıyorum.Eşzamansız bir geri çağırma işlevinden değer nasıl döndürülebilir?
Geri aramaktan biraz değer almak istiyorum. Açıklama için aşağıdaki betiğe bakın.
function foo(address){
// google map stuff
geocoder.geocode({ 'address': address}, function(results, status) {
results[0].geometry.location; // I want to return this value
})
}
foo(); //result should be results[0].geometry.location; value
ben bu değeri sadece "tanımsız" almanın dönmek deneyin. SO'dan bazı fikirler takip ettim, ancak hala başarısız oluyor.
olanlar şunlardır:
function foo(address){
var returnvalue;
geocoder.geocode({ 'address': address}, function(results, status) {
returnvalue = results[0].geometry.location;
})
return returnvalue;
}
foo(); //still undefined
Buraya gelen herkes [** lütfen önce bu soruyu okuyun **] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call). Bu sorunun nasıl çözüleceğini açıklar. –
** [Bir işlev içinde değiştirdikten sonra değişkeni neden değiştirmiyorsunuz? - Eşzamansız kod referansı] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) ** Ayrıca sağlar Konuyla ilgili daha genel, ayrıntılı bir açıklama. –
Q ya da angularJs ile birlikte gelen $ q kitaplığı gibi varyantlarından herhangi birini kullanın. Ve asla arkana bakma. Eşzamansız işlevler hemen tanımsız olarak döner. Yani asla zamanınızı boşa harcamayın undefined şeyler yapmaya çalışın. Ayrıca, normalde yaptığınız gibi, uyumsuz fonksiyonlarınızda asla 'return' anahtar kelimesini kullanmayın. Bunun yerine ertelenmiş sözler kullanın. deferred.resolve (yapmak istediğiniz STUFF), daha sonra basitçe iade edebilirsiniz, 'return deferred.promise; '. :) – ISONecroMAn