异步回调:返回值
由于异步回调函数的非阻塞性质,从异步回调函数返回值可能是一个挑战。以下是问题的细分和解决方案:
在提供的示例中:
function foo(address) { // Google Maps stuff geocoder.geocode({'address': address}, function(results, status) { // Unable to return results[0].geometry.location synchronously }); }
在异步地理编码回调内,无法同步检索您要返回的值。尝试这样做将导致未定义的值。
解决方案:回调结果
要获取该值,您可以将回调函数传递给 foo ,该函数将接收结果:
function foo(address, callback) { geocoder.geocode({'address': address}, function(results, status) { callback(results[0].geometry.location); }); }
在 foo 的回调中,您可以访问该位置value:
foo("address", function(location) { alert(location); // Result obtained here });
异步函数链
如果异步调用嵌套在另一个函数中,则该函数也必须是异步的才能获取返回值。对于复杂的场景,可以考虑使用像 Q 这样的 Promise 库来高效管理异步操作。
以上是如何从 JavaScript 中的异步回调函数返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!