在所有$resources
解决之后 之前,如何延迟执行某个功能?我的目标是能够在所有log
解析后通过$resources
数组进行解析,并将单个成功通知推送到UI,而不是每次成功都推送一个通知。
我的代码基于angular -- accessing data of multiple http calls - how to resolve the promises。我意识到$scope.promises
是空的,因为item.$save()
没有返回任何内容,但我希望您能看到我正在尝试将未解决的承诺推送到promises
数组。
$scope.save = function () {
$scope.promises = [];
$scope.log = [];
angular.forEach($scope.menuItems, function(item) {
$scope.promises.push(item.$save(function(menu){
debugger; // execution gets here 2nd
console.debug("success");
$scope.log.push(msg: 'success');
}));
}, this);
$q.all($scope.promises).then(function() {
debugger; // execution gets here 1st
console.debug("all promises resolved");
});
};
答案 0 :(得分:0)
由于$save
未返回承诺,因此您需要一个中间版:
angular.forEach($scope.menuItems, function(item) {
var d = $q.defer(); // <--- the intermediate promise
item.$save(
function(menu){
debugger;
console.debug("success");
$scope.log.push(msg: 'success');
d.resolve(menu); // <--- resolving it, optionally with the value
},
function(error){
d.reject(error); // <--- rejecting it on error
}
);
$scope.promises.push(d.promise);
}, this);
顺便说一句,不要忘记扔掉承诺的数组,否则你会留下垃圾:
$q.all($scope.promises).then(...).always(function() {
$scope.promises = null;
});
并且,如果$scope.promises
NOT 暴露给视图,则不需要在范围内;它可以只是一个变种。