1

我需要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 循环。我无法想象解决方案,尽管我阅读了很多关于异步调用的信息。

4

1 回答 1

1
for (var n=0;n<types.length;n++) {
  subquery(types[n]);
}  

上面的代码将调用一个子查询,每个子查询调用都会立即完成,因为 $.getJSON 函数不会中断工作流程。

在上面的代码执行你所拥有的之后,ajax 请求的 types.length 时间几乎在同一时间开始,并且总是会有竞争条件。

一种方法是使用 jquery deferred objects,它完全解决了您描述的条件,在Using Deferreds in jQuery 1.5 中阅读更多内容

于 2013-06-20T14:09:25.637 回答