Freebase:for循环中的异步调用

时间:2013-06-20 14:02:23

标签: javascript asynchronous freebase

我需要根据实体的类型对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循环被执行。我无法想象解决方案,尽管我阅读了很多关于异步调用的信息。

1 个答案:

答案 0 :(得分:1)

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

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

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

一种方法是使用jquery延迟对象,它完全解决了您描述的条件,请在Using Deferreds in jQuery 1.5

阅读更多内容