除此之外,为什么在调用 $q.all
之前设置 $scope
值完全被忽略?
主 Controller 内的功能:
$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()
函数时,什么也没有发生。 bool $scope.loaded
不会在作用域上激活,并且不会引发异常(这正是我所期望的)。这是为什么?
我编辑了代码并让我的 Controller 函数Apply
检查entity = "NULL"
,这似乎解决了它是否是一个问题数组与否。仍然没有回答我的问题,即为什么如果 q.all
没有返回一个 promise 数组,那么在调用它的函数中什么也不会发生,即使在 q.all< 之前
被调用。
最佳答案
请注意,Promise 库将所有引发的错误包装在括号代码中,因此强烈建议您在将函数包装在 Promise 机制中之前先对其进行测试。
就您而言:
keepICorrect: function (security) {
var promises = [];
for (var i = 0 ; i < entity.length; i++) {
promises.push(this.getDataFromREST(security, i));
}
return promises;
},
你说它是一个闭包,所以我认为 this.getDataFromREST
应该是 undefined
。请尝试逐步添加正确的代码,以免隐藏您的错误并删除代码中的错误。
关于javascript - 为什么如果 `$q.all` 没有返回一个 Promise 数组,那么不会抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047777/