如何使用setTimeout并获取返回变量?

时间:2014-04-29 03:17:45

标签: javascript google-maps-api-3

我有一个功能地理编码可以工作......我正在尝试实现延迟以防止超出查询限制错误,这里是我的javascript:

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

变量tmpResult包含我的地理编码的结果..但是,当我运行脚本时,tmpResultnull ..是否有我遗漏的东西?

谢谢!

1 个答案:

答案 0 :(得分:3)

tmpResult运行后{p> setTimeout()完全有效。对您而言,问题可能是您在tmpResult运行之前尝试使用setTimeout()。请记住,它将在未来100ms运行。您的其他JavaScript将在此之前继续运行。

您需要做的是使用tmpResultsetTimeout()的值或调用某个函数,并将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()也不是异步函数,因为如果是,那么你也必须与它异步编码。