首頁 >web前端 >js教程 >如何從 JavaScript 中的非同步回呼函數檢索值?

如何從 JavaScript 中的非同步回呼函數檢索值?

Barbara Streisand
Barbara Streisand原創
2024-12-26 10:48:11435瀏覽

How to Retrieve Values from Asynchronous Callback Functions in JavaScript?

無法從非同步回呼函數擷取值

Stack Overflow 上有很多執行緒討論這個常見問題。儘管進行了大量搜索,但一些開發人員在從回調訪問值時仍然面臨困難。

主要挑戰在於同步方法無法從非同步呼叫傳回值。如提供的範例所示:

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

嘗試直接傳回所需值會產生「未定義」回應。隨後,提出了修改建議,但沒有效果。

此類嘗試的範例:

function foo(address){
  var returnvalue;    
  geocoder.geocode( { 'address': address}, function(results, status) {
      returnvalue = results[0].geometry.location; 
  })
  return returnvalue; 
}
foo(); //still undefined

解決方案

解決方案需要透過對 foo函數的回調,該函數隨後將收到返回值value:

function foo(address, fn){
  geocoder.geocode( { 'address': address}, function(results, status) {
     fn(results[0].geometry.location); 
  });
}

foo("address", function(location){
  alert(location); // this is where you get the return value
});

非同步函數和回調結構:

非同步內部函數呼叫需要使用同樣非同步的呼叫需要使用相同非同步的呼叫包裝函數來檢索響應。

圖書館和替代品方法:

透過使用 Q 等 Promise 庫可以簡化處理大量回調。這些框架提供了一種方便的方法來管理非同步操作並以更有效率和結構化的方式存取其結果。

以上是如何從 JavaScript 中的非同步回呼函數檢索值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn