我目前正在学习具体的 Javascript 和 AngularJS ,有一件事我似乎无法理解该怎么做。正如你将要看到的那样,我也在努力将自己的思维从“顺序”思维中转移开来
我想发出两个$http.post()
请求,当它们都成功时,执行一个函数。我设法通过嵌套这样的请求来使它工作:
$http.post(url, {something}).success(function (response) {
$http.post(url, {something}).success(function (secondResponse) {
myFunction();
});
});
这是有效的,但这是嵌套的,不是异步的,而且通常很蹩脚。我想知道是否有可能像这样提出这些请求(我知道以下代码无法正常工作):
$http.post(url, {something}).success(function (response) { someKindOfFlag = true });
$http.post(url, {something}).success(function (response) { anotherKindOfFlag = true });
if (someKindOfFlag && anotherKindOfFlag) { myFunction(); }
答案 0 :(得分:2)
在这种情况下,正确的解决方案是继承promise API并使用AngularJS $q service - 其$q.all()
方法更精确。
$ http服务已经可以使用promises,因为它从$ http函数调用返回一个promise。
要在两个$http
请求完成后执行回调,您可以通过以下方式使用$q.all()
方法:
$q.all([$http.post(url, {something}), $http.post(url, {something})]).then(function(arrayOfResponses) {
// success callback code goes here
});
答案 1 :(得分:1)
你应该在Javascript中听说过$ q或promises,特别是Angular。为了实现您的目标,您需要使用$ q API。
这是你如何做到的。您需要在服务或控制器中注入$ q(但是,如果可能的话,我建议将其用于服务!)。
var firstResponse = $http.post(url, {something});
var secondResponse = $http.post(url, {something});
$q.all([firstResponse,secondResponse]).then(function(data){
//data[0] === firstResponseData
//data[1] === secondResponseData
myFunction();
});