所以我有一个' for'在每次迭代中调用一个不同的ajax调用,在每个调用的回调中,我收集一些url并为每个url运行ajax调用。
它看起来像这样
for(var i=1; i<num_pages + 1; i++)
{
var page_url = main_url + "&sf=" + i;
console.log('=== doing page: ' + page_url);
try
{
$.ajax({url: page_url, async:false, success: function(data)
{
var urls = [];
$('a', data).each(function()
{
if($(this).attr('itemprop') == 'url')
{
var u = $(this).attr('href');
if(urls.indexOf(u) == -1)
{
urls.push(u);
}
}
});
// for(var j=0; j<urls.length; j++)
for(var j=0; j<3; j++)
{
doSetTimeout(j, i);
}
}
});
}
catch(err)
{
}
}
function doSetTimeout(i, page_num)
{
setTimeout(function()
{
get_info(urls[i], page_num);
}, 100);
}
doSetTimeout()用于在调用get_info()之间延迟100ms,get info是一个包含异步ajax调用的函数。
我执行异步尝试不要使请求超载服务器,因为我试图找到一个订单,所以我可以知道它何时完成,但它不起作用。
因为它是异步jquery的ajaxStop在每个ajax完成后触发。
不确定如何使用promises做到这一点。
非常感谢帮助。
编辑:这里是get_info的样子:
function get_info(url, page_num)
{
$.ajax({ url: url, async: false, success: function(data)
{
// this is optional, sometimes it's true sometimes it's false
if(views_enabled)
{
$.ajax({type:'POST', async:false, url:'/someurl/', data:{price: price}, success: function()
{
item['views'] = data.views;
all_data.push(item);
console.log('finished item');
}
});
}
else
{
console.log('finished item');
}
}
});
}