我需要根据实体的类型对freebase
进行n次查询。
例如,如果获得了先前查询中的类型,我会这样做:
for (var n=0;n<types.length;n++) {
subquery(types[n]);
}
function subquery (typid) {
query = [{
"schema": {
"id": typid,
... etc ... }
}]
$.getJSON(service_url + '?callback=?', params, function(response) {
'... etc...';
}
}
但在第一个$.getJSON
响应之前,第二个for循环被执行。我无法想象解决方案,尽管我阅读了很多关于异步调用的信息。
答案 0 :(得分:1)
for (var n=0;n<types.length;n++) {
subquery(types[n]);
}
上面的代码将调用子查询,并且每个子查询调用将立即完成,因为$ .getJSON函数不会中断工作流。
在上面的代码执行完你所拥有的内容之后,ajax请求的types.length次几乎在同一时间开始,并且总是会有竞争条件。
一种方法是使用jquery延迟对象,它完全解决了您描述的条件,请在Using Deferreds in jQuery 1.5
阅读更多内容