Javascript 如何使用setTimeout并获取返回变量?
我有一个功能地理代码,可以工作。。。我试图实现一个延迟以防止超过查询限制的错误,下面是我的javascript:Javascript 如何使用setTimeout并获取返回变量?,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我有一个功能地理代码,可以工作。。。我试图实现一个延迟以防止超过查询限制的错误,下面是我的javascript: tmpResult = null; setTimeout(function() { tmpResult = geocode(facilities[j],cities[j],states[j]); }, 100); 变量tmpResult具有my geocode的结果。。但是,当我运行脚本时,tmpResult为null。。有什么我遗漏的吗 谢谢 tmpResult在s
tmpResult = null;
setTimeout(function() {
tmpResult = geocode(facilities[j],cities[j],states[j]);
}, 100);
变量tmpResult
具有my geocode的结果。。但是,当我运行脚本时,tmpResult
为null
。。有什么我遗漏的吗
谢谢
tmpResult
在setTimeout()
运行及之后完全有效。您的问题可能是在运行setTimeout()
之前试图使用tmpResult
。记住,它将在未来运行100毫秒。在此之前,您的其他javascript将继续运行
您需要做的是在setTimeout()
中使用tmpResult
的值,或者调用某个函数并将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()
也不是一个异步函数,因为如果是,那么您也必须使用它异步编码。tmpResult
在setTimeout()
运行时以及之后完全有效。您的问题可能是在运行setTimeout()
之前试图使用tmpResult
。记住,它将在未来运行100毫秒。在此之前,您的其他javascript将继续运行
您需要做的是在setTimeout()
中使用tmpResult
的值,或者调用某个函数并将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()
也不是一个异步函数,因为如果是,那么您也必须使用它异步编码。tmpResult
在setTimeout()
运行时以及之后完全有效。您的问题可能是在运行setTimeout()
之前试图使用tmpResult
。记住,它将在未来运行100毫秒。在此之前,您的其他javascript将继续运行
您需要做的是在setTimeout()
中使用tmpResult
的值,或者调用某个函数并将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()
也不是一个异步函数,因为如果是,那么您也必须使用它异步编码。tmpResult
在setTimeout()
运行时以及之后完全有效。您的问题可能是在运行setTimeout()
之前试图使用tmpResult
。记住,它将在未来运行100毫秒。在此之前,您的其他javascript将继续运行
您需要做的是在setTimeout()
中使用tmpResult
的值,或者调用某个函数并将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()
也不是一个异步函数,因为如果是,那么您也必须使用它异步编码。在翻阅了许多页面,寻找setTimeout()的完整解释之后,这是我遇到的最好的一个。非常感谢您的详细回复!在翻阅了许多页面,寻找setTimeout()的详细解释之后,这是我遇到的最好的解释。非常感谢您的详细回复!在翻阅了许多页面,寻找setTimeout()的详细解释之后,这是我遇到的最好的解释。非常感谢您的详细回复!在翻阅了许多页面,寻找setTimeout()的详细解释之后,这是我遇到的最好的解释。非常感谢您的详细回复!