Javascript 延迟函数,但让循环等待它
Javascript Delay function but let loop wait for it
我知道这不是一个好主意,但每个程序员都想学习更多。目前,我一直在尝试网络抓取。第一次创建脚本并运行它会阻止我的 IP 地址。我错了,因为在我的脚本中我向网站发送了太多请求,这样就会给网站带来很多流量,让他们认为我是入侵者,我想到了这个想法来延迟我的请求,如何让我的循环等待函数完成?我不想使用这样的东西。这将每 5 秒执行一次
(function(links){
setTimeout(function() { scrapeAnotherLink(links); }, delay);
})(result[val]);
delay += 5000;
我想等待我的 ajax 请求从提供的链接完成报废,然后等待 5 秒,然后再次执行。
我的代码。
抓取链接。
$('#scrape').click(function() {
$.ajax({
type: 'get',
url: 'scrape.php',
data:{Param:1},
dataType: 'json',
cache: false,
success: function(result) {
for(var val in result) {
link = result[val];
scrapeAnotherLink(link);
}
},
});
});
function scrapeAnotherLink(link){
//Some ajax here
setTimeout(function() {
output_log(link);
}, 5000);
}
function output_log(str){
$('#output').append(str+'<br/>');
}
我读到一些刮板池IP地址,但我不知道如何
这样的事情就可以完成了这项工作。不要使用循环,而是进行递归调用,该调用将在上一个 ajax 请求结束时执行。下面的代码有一些假设,但它传达了这个想法。
function executeAjax() {
$.ajax({
type: 'get',
url: 'scrape.php',
data:{Param:1},
dataType: 'json',
cache: false,
success: function(links) {
scrapeAnotherLink(links, 0);
}
});
}
function scrapeAnotherLink(links, index){
//Some ajax here
function executeCall(){
$.ajax({
url : links[index],
success : function(str) {
output_log(str);
scrapeAnotherLink(links, ++index);
}
});
}
setTimeout(executeCall, 5000);
}
function output_log(str){
$('#output').append(str+'<br/>');
}
相关文章:
- 如何让foreach循环等待$http.get完成后再继续
- 如何使for循环等待回调返回值
- foreach循环等待,直到每个步骤中的每个函数都完成
- Javascript 循环 - 等待值
- 如何使循环等待到ajax响应
- 让循环等待,直到上一次传递完成
- JavaScript循环等待一些函数返回,然后执行下一个循环
- Javascript 延迟函数,但让循环等待它
- 在JavaScript或Jquery中,让循环等待按钮按下后再继续
- 同步forEach循环(等待它结束)
- 如何在最里面的循环等待响应时延迟嵌套迭代
- 异步for循环:如何让for循环等待函数完成
- 我如何使for循环等待db承诺完成之前,它继续下一个迭代
- 如何强制循环等待,直到用户按下提交按钮
- 节点承诺循环等待结果
- 如何让for循环等待一个函数在javascript中执行
- 让循环等待ajax调用
- jQuery如何使for循环等待加载()完成
- 让 for 循环等待代码完成执行 javascript
- 如何使循环等待回调成功