如何在 JavaScript 中處理非同步回呼函數傳回
從同步方法中擷取值時,非同步回調函數帶來了挑戰。考慮以下程式碼片段,它嘗試從回呼函數中檢索位置值:
function foo(address) { 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, 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 });
在此修改後的程式碼中,foo 函數接受回呼 fn 來處理回傳值。然後,非同步函數 geocoder.geocode 將位置值作為參數傳遞給 fn。然後,回調函數可以根據需要使用位置值。
非同步程式設計注意事項
請記住,當內部函數呼叫是非同步時,所有封閉函數也必須是非同步的回傳回應。如果使用大量回調,請考慮使用像 Q 這樣的 Promise 程式庫來簡化流程。
以上是如何從 JavaScript 中的非同步回呼函數檢索值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!