我是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!'));
    });
}


RegulationVersionInstallationTypeReg是在实体上为每个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!')});

09-25 17:47