【发布时间】:2016-03-06 23:47:51
【问题描述】:
除此之外,为什么在 $q.all 被称为完全忽略之前设置 $scope 值?
主控制器内的功能:
$scope.apply = function (security) {
var entity = shareDataService.getModalEntity();
var depot = shareDataService.getModalDepot();
$scope.loaded = false;
var myDataPromise;
if (entity == "NULL") {
myDataPromise = getDataService.getDataFromREST(security);
} else {
myDataPromise = $q.all(getDataService.keepICorrect(security));
};
myDataPromise.then(function () {
//DO STUFF
}, function errorCallback(response) {
//DO MORE STUFF
});
}
我的服务中的keepICorrect() 函数(这是一个闭包):
keepICorrect: function (security) {
var promises = [];
for (var i = 0 ; i < entity.length; i++) {
promises.push(this.getDataFromREST(security, i));
}
return promises;
},
但是,当$scope.apply() 函数被执行时,什么也没有发生。布尔值$scope.loaded 不会在作用域上激活,也不会引发异常(这是我所期待的)。这是为什么呢?
我已经编辑了代码并让我的控制器函数Apply检查entity = "NULL",这似乎已经解决了它是否是一个数组的问题。仍然没有回答我的问题,即为什么如果 q.all 没有返回一个承诺数组,即使在调用 q.all 之前,在调用它的函数中也不会发生任何事情。
【问题讨论】:
-
entity在那个keepICorrect()函数中是什么?参数为security,循环中使用security。 -
entity是一个在服务中声明和获取的数组。security在我的 for 循环中传递给我的getDataFromREST()函数。 -
不应该是
return $q.all吗? -
if (entity === Array)将entity与全局Array构造函数进行比较。它不会测试entity是否是一个数组。 -
这肯定是您检查 var 是否为数组的方式...stackoverflow.com/questions/767486/…
标签: javascript angularjs asynchronous promise