sae*_*eed 7 javascript throttling settimeout node.js
我有一个阵列.我可以用foreach方法循环它.
data.forEach(function (result, i) {
url = data[i].url;
request(url);
});
Run Code Online (Sandbox Code Playgroud)
请求函数正在向给定的URL发出http请求.但是,同时提出所有这些请求会导致各种问题.
所以我认为我应该通过引入某种计时器来减慢速度.
但我不知道如何将forach循环与setTimeOut/setInterval结合起来
请注意我在服务器(nodejs)而不是浏览器上执行此操作.
谢谢你的帮助.
由于您的问题是全局性的,您应该调整您的request
函数,一次只运行5个请求 - 使用全局静态计数器.如果你的要求是在类似之前
function request(url, callback) {
ajax(url, callback);
}
Run Code Online (Sandbox Code Playgroud)
现在使用类似的东西
var count = 0;
var waiting = [];
function request(url, callback) {
if (count < 5) {
count++;
ajax(url, function() {
count--;
if (waiting.length)
request.apply(null, waiting.shift());
callback.apply(this, arguments);
});
} else
waiting.push(arguments);
}
Run Code Online (Sandbox Code Playgroud)
data.forEach(function (result, i) {
url = data[i].url;
setTimeout(
function () {
request(url);
},
1000 * (i + 1) // where they will each progressively wait 1 sec more each
);
});
Run Code Online (Sandbox Code Playgroud)
而不是setTimeout
让它们按顺序运行。callback
我假设你的函数有一个参数request()
。
function makeRequest(arr, i) {
if (i < arr.length) {
request(arr[i].url, function() {
i++;
makeRequest(arr, i);
});
}
}
makeRequest(data, 0);
Run Code Online (Sandbox Code Playgroud)
如果您需要在请求之间多一点时间,请将 添加setTimeout
到回调中。
function makeRequest(arr, i) {
if (i < arr.length) {
request(arr[i].url, function() {
i++;
setTimeout(makeRequest, 1000, arr, i);
});
}
}
makeRequest(data, 0);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4366 次 |
最近记录: |