我正试图在一个页面上获得关于许多网址的Facebook分享数量。为此,我为每个人打电话http://graph.facebook.com。因为我在一个循环中执行此操作而遇到问题,我的循环在我的回调函数完成之前执行所以我遇到了麻烦。我的代码看起来像这样
$('span.share_counter').each(function() {
site_url=$(this).attr('id');
getJSON(site_url, function(err, data) {
alert(site_url);
});
});
有没有什么可以使循环等到getJSON的回调函数完成然后继续或者我是以错误的方式接近它?
答案 0 :(得分:1)
基本上没有办法做你想做的事。而且,你不应该试图这样做。 Javascript在事件循环上运行,这意味着如果您有一个特定的操作阻止,则整个UI会冻结。
回调的创建允许UI通过让其他作业转向处理来继续。 getJson
因某种原因接听回电。它可能会阻塞很长时间,这对你的事件循环来说很糟糕。
您应该尝试重新构建代码,以便不需要getJson()
调用立即返回。
您可能想要做的事情:
$('span.share_counter').each(function() {
var curElement = $(this);
var site_url = curElement.attr('id');
getJSON(site_url, function(err, data) {
modifyElement(curElement, data)
});
});