如何在 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中文网其他相关文章!