我正在尝试对我的 ajax 请求进行速率限制,以便保持在 API 限制之内。我向我的服务器发出一个请求,该请求返回一个数据列表。从该数据列表中,我向一个 api 发出请求,该 api 不允许每秒接收多个请求。如何使用 setTimeout 或类似的函数来限制我的请求?
myArray = ['1','2','3'];
function f1(){
for (var num in myArray){
$.ajax({
type: "POST",
url: "backend.php",
data: {suburbs : num},
success: function(data){
for (var item in data){
f2(data[item])
}
}
});
}
}
function f2(text) {
$.getJSON("http://example.com/test.html?" + text, null, function (data) {
console.log(data)
}
}
最佳答案
只需创建一个函数列表:
var duration = 1000; // API duration
var expectAsync = 3000; // time to wait for new functions;
var lastCall = Date.now();
var myArray = ['1','2','3'];
function queryArray() {
var fnList = [];
myArray.forEach(function(v){
fnList.push( function() { // push f1 to list;
$.ajax({
type: "POST",
url: "backend.php",
data: {suburbs : v},
success: function(data){
fnList.push(function(){ // push f2, after we get response;
for (var item in data){
f2(data[item]);
}
})
}
})
});
// here we go;
var int;
int = setInverval(function(){
if(fnList.length){
var fn = fnList.shift(); // pop first function from left;
fn();
}else{
if((Date.now() - lastCall) > expectAsync) clearInterval(int);
}
lastCall = Date.now();
}, duration);
}
关于javascript - 多个ajax请求的速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295688/