1

我目前正在专门学习JavascriptAngularJS,但有一件事我似乎不明白该怎么做。正如你将看到的那样,我也在努力将我的思想从“顺序”思维转变。
我想发出两个$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(); }
4

2 回答 2

2

在这种情况下,正确的解决方案是中继 promise API 并使用AngularJS $q 服务——它的$q.all()方法更精确。

$http 服务已经使用了 Promise,因为它从 $http 函数调用返回一个 Promise。

$http要在两个请求都完成时执行回调,您可以$q.all()按以下方式使用该方法:

$q.all([$http.post(url, {something}), $http.post(url, {something})]).then(function(arrayOfResponses) {
  // success callback code goes here
});
于 2013-04-08T08:17:08.130 回答
1

你应该听说过 JavaScript 中的 $q 或 promise,尤其是 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();
});
于 2013-04-08T08:15:23.460 回答