无法从异步回调函数中检索值
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中文网其他相关文章!