AngularJS:来自一个$ http调用的两个promise

时间:2015-01-16 17:21:59

标签: angularjs angularjs-scope

我想知道什么是最优雅的方式来初始化/从AJAX调用中填充的对象,并在指令中的某处“并发”使用。

我有一个带有这样片段的控制器:

$scope.var1 = {};
$scope.var2 = {};
$http({
  url: "/httpService",
  method: "GET",
  params: {}
}).success(function(data, status) {
  $scope.var1 = data.some; // (*1)
  $scope.var2 = data.other;
})

我也在使用直接绑定到var1的指令:

var1 : '='

并且在指令内部对var1进行了一些检查。

if (var1.prop) // (*2) {
   doSth();
}

取决于首先调用(* 1),(* 2)中的哪一个,结果是不同的。

您对此案有何建议?如果我只有一个变量设置为(* 1),我只会使用由$ http得到的promise。

我想知道在Angular中最常用的方法是什么。 将var1和var2组合成一个对象对我来说似乎并不优雅。

2 个答案:

答案 0 :(得分:0)

在你的指令中创建一个函数,从$ http调用中获取promise。为函数提供一个将执行的回调:

if (var1.prop) // (*2) {
  doSth();
}

通过制作回调的那一部分,您可以确保在数据从通话中返回之前不会完成。

一次通话你没有两个承诺。你有一个承诺和一个电话。这样对待它。

答案 1 :(得分:0)

如果我说得对 - 你想将异步接收的部分数据传递给指令,但是你不希望指令“知道”收到的数据结构。

然后,您可以将数据请求移出控制器并使用服务docsexamples)作为将要处理的附加层数据请求并提供直接提取var1(或var2)以在控制器内使用(以及指令)的方法。