在我在本网站上看到的关于setTimeout的所有问题中,大多数人都在setTimeout声明中执行该方法。我不是这样做的。
代码:
var nums = [1,2,3,4,5,6,7,8,9];
for(var i=0; i < nums.length; i++){
setTimeout(function(num){
var url = getUrl(num);
//query(url); // prints out query operation and data return
console.log(num);
}, 1000, nums[i]);
}
当运行命令启动应用程序时,无论我设置毫秒延迟的大小,查询都将执行数组中的所有项目。当打印到控制台运行此代码时,我得到相同的效果。我做错了吗?其他人可以复制这个吗?
我创建了一个运行setInterval来测试api限制的应用程序,它按预期工作。我想我可能会错过某些有关setTimeout和循环的节点的后端知识? setTimeout Docs
文档确实说它不会保证它将执行回调的时间,但我有120个项目,它将触发登录并立即触发它们。
答案 0 :(得分:0)
因为那些函数setTimeout
或setInterval
异步工作,
您必须在setTimeout / setInterval回调函数中调用下一个循环。
var _i = 0
var doQuery = setInterval(function(){
if(_i == nums.length) clearInterval(doQuery);
var url = getUrl(nums[_i]);
query(url);
_i++;
},1000);