我有一个有效的函数地理编码...我正在尝试实现延迟以防止超出查询限制错误,这是我的 javascript:
tmpResult = null;
setTimeout(function() {
tmpResult = geocode(facilities[j],cities[j],states[j]);
}, 100);
变量tmpResult
具有我的地理编码的结果。但是,当我运行脚本时,tmpResult
为null
。有什么吗?我失踪了?
谢谢!
最佳答案
tmpResult
当 setTimeout()
时完全有效运行之后。您遇到的问题可能是您正在尝试使用 tmpResult
在setTimeout()
之前已经跑了。请记住,它将在未来 100 毫秒内运行。您的其他 javascript 将在此之前继续运行。
您需要做的是使用 tmpResult
的值来自setTimeout()
内或者调用某个函数并将 tmpResult
的值传递给它.
setTimeout(function() {
var tmpResult = geocode(facilities[j],cities[j],states[j]);
callMyFunction(tmpResult);
}, 100);
setTimeout()
是异步的,使用时不能同步编程。您必须异步编码,这意味着 tmpResult
的值在计时器回调执行之前无效,因此您不能在计时器回调触发之前尝试使用它。
正如您所发现的,如果您尝试这样做:
var tmpResult = null;
setTimeout(function() {
tmpResult = geocode(facilities[j],cities[j],states[j]);
}, 100);
console.log(tmpResult);
它不会工作,因为你的 console.log(tmpResult)
语句将在计时器触发之前运行,因此 tmpResult
还没有值。
仅供引用,您应该确保 geocode()
也不是一个异步函数,因为如果它是,那么您也必须使用它进行异步编码。
关于javascript - 如何使用setTimeout并获取返回变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23354834/