我有一个功能地理编码可以工作......我正在尝试实现延迟以防止超出查询限制错误,这里是我的javascript:
tmpResult = null;
setTimeout(function() {
tmpResult = geocode(facilities[j],cities[j],states[j]);
}, 100);
变量tmpResult
包含我的地理编码的结果..但是,当我运行脚本时,tmpResult
为null
..是否有我遗漏的东西?
谢谢!
答案 0 :(得分:3)
tmpResult
运行后{p> setTimeout()
完全有效。对您而言,问题可能是您在tmpResult
运行之前尝试使用setTimeout()
。请记住,它将在未来100ms运行。您的其他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()
也不是异步函数,因为如果是,那么你也必须与它异步编码。