2013-03-15 102 views
0

在角的那一刻我有这样的:角JS异步两个API请求

app.factory("myService", function($http, $q) { 
    return { 
     doBoth: function(data) { 
      return $q.all([$http.post("/search/local", data), $http.post("/search/shape", data)]); 
     } 
    }; 
}); 

和我这样称呼它:

$scope.$on("localSearch", function(event, data) { 
    return myService.doBoth(data); 
}); 

不过,我不认为这是异步发生。他们都需要相当长的时间才能完成,因此我需要Angular同时请求这两个请求,因此完整的请求不是一个+另一个,而是最快的时间都返回。

+0

感谢您的编辑 – 2013-03-15 17:01:33

回答

0

如果您想要在两个查询完成后触发回调,将其置于$q.then()方法中。

$scope.$on("localSearch", function(event, data) { 
    return myService 
    .doBoth(data) 
    .then(function (response) { 
     // both deffered completed 
    }); 
}); 

我创建的样本这里http://plnkr.co/edit/7G8oFMSx8cPC98zDhlNq?p=preview

+0

这是否会在同一时间发送两个查询?或者一个接一个 – 2013-03-15 18:56:53

+0

是的,它是从$ q源代码中看到的,更多的视觉证明请参见http://d.pr/i/WKHY。其实它也适用于你的例子 - 因为这是$ q执行期货的方式,你只是缺少回调部分 – 2013-03-15 19:12:58

+0

非常感谢你现在测试 – 2013-03-15 19:13:31