我有一个可以正常工作的地址地理编码...我正在尝试实施延迟以防止查询超限错误,这是我的JavaScript:

tmpResult = null;
setTimeout(function() {
    tmpResult = geocode(facilities[j],cities[j],states[j]);
}, 100);


变量tmpResult具有我的地理编码的结果。.但是,当我运行脚本时,tmpResultnull。是否缺少某些内容?

谢谢!

最佳答案

tmpResult运行时及之后均完全有效。您遇到的问题可能是您在setTimeout()运行之前尝试使用tmpResult。请记住,它将在未来100毫秒内运行。您的其他JavaScript将在此之前继续运行。

您需要做的是在setTimeout()中使用tmpResult的值或调用某些函数并将其传递为setTimeout()的值。

setTimeout(function() {
    var tmpResult = geocode(facilities[j],cities[j],states[j]);
    callMyFunction(tmpResult);
}, 100);


tmpResult是异步的,使用时不能同步编程。您必须异步编码,这意味着setTimeout()的值在计时器回调执行之前是无效的,因此您不能在计时器回调触发之前尝试使用它。

如您所知,如果您尝试这样做:

var tmpResult = null;
setTimeout(function() {
    tmpResult = geocode(facilities[j],cities[j],states[j]);
}, 100);
console.log(tmpResult);


这将不起作用,因为您的tmpResult语句将在计时器触发之前运行,因此console.log(tmpResult)尚无值。



仅供参考,您应该确保tmpResult也不是一个异步函数,因为如果它是异步函数,那么您还必须使用它异步编码。

07-27 15:33