前一段时间我在带回家的测试中遇到了一个代码问题。它如下:
数据库限制
您将获得一个用户数据 userInfo 数组和一个带有单个用户数据参数的函数 updateDB 。 updateDB 进行异步调用,解析用户数据并将解析后的数据插入数据库。数据库限制请求以确保所有用户数据都添加到数据库中我们需要一个函数 addAllUserData ,在 userInfo 中的每个条目上调用 updateDB 确保永远不会超过每秒7次呼叫,以防止受到限制。
var userInfo = [{'name':'antonio', 'username':'antonio_pavicevac_ortiz'}], dataBase = [];
function updateDB(singleUserDataArgument, callback){
dataBase.push(callback(singleUserDataArgument));
}
function addAllUserInfo(data) {
var eachUserData;
setInterval(function(){
eachUserData = data.map(data)
}, 7000);
}
正如你在我的尝试中看到的那样,我很难绕着这个练习缠头。任何人都可以注入关于异步调用的节流意味着什么吗?
提前致谢!
答案 0 :(得分:2)
// contains times at which requests were made
var callTimes = [];
function doThrottle(){
// get the current time
var time - new Date().getTime();
// filter callTimes to only include requests this second
callTimes = callTimes.filter(function(t){
return t > time-1000;
});
// if there were more than 7 calls this second, do not make another one
if(callTimes.length > 7) return true;
else{
// safe, do not throttle
callTimes.push(time);
return false;
}
}
// use like this
function makeRequest(){
if(doThrottle()){ /* too many requests, throttle */ }
else{ /* it's safe, make the ajax call*/ }
}