我是AngularJS的新手,正在为promise API苦苦挣扎。我已经在控制器中实现了save()
函数,以便获得:
法规版本已保存
保存法规版本后,将以异步并行方式保存其所有安装类型
一切完成后显示的saved!
日志(在我的真实应用程序中,我想在此处进入其他应用程序状态)
那是我当前在控制器中的代码:
var saveRegulationInstallationTypes = function (result) {
var saveOperations = [];
angular.forEach(vm.installationTypeRegs, function (
installationTypeReg, key) {
installationTypeReg.regulationVersion = result;
var res = InstallationTypeReg.update(installationTypeReg, function () {
console.log('Installation type updated');
});
saveOperations.push(res);
});
return $q.all(saveOperations);
}
function save() {
var regulationVersionSaved = RegulationVersion.update(vm.regulationVersion);
return regulationVersionSaved.$promise.then(
function (result) {
saveRegulationInstallationTypes(result).then(console.log('saved!'));
});
}
RegulationVersion
和InstallationTypeReg
是在实体上为每个http操作返回$resource
方法的服务。执行save()方法时的问题是,我在saved!
之前获得了Installation type updated
日志。我想,当我从函数中返回q.all
时,它应该等待完成所有内部操作,然后再调用回调。我究竟做错了什么?
最佳答案
似乎有两个问题:1)“ saveOperations.push(res);” -应该是“ saveOperations.push(res。$ promise);” -与数组一样,它应存储诺言而不是整个对象。和2)saveRegulationInstallationTypes(result).then(console.log('saved!'));应该是saveRegulationInstallationTypes(result).then(function(){console.log('saved!')});