等待函数完成多个资源调用

时间:2017-06-23 07:10:07

标签: javascript angularjs

我是AngularJS的新手并且在使用promise API时遇到了困难。我在我的控制器中实现了save()函数,以获得:

  1. 保存的规则版本
  2. 保存规范版本后,其所有安装类型都以异步并行方式保存
  3. 完成所有操作后显示saved!日志(在我的实际应用程序中,我想在此处转到其他应用程序状态)
  4. 这是我目前在控制器中的代码:

    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 个答案:

答案 0 :(得分:1)

似乎有两个问题:1)“saveOperations.push(res);” - 应该是“saveOperations.push(res。$ promise);” - 在数组中它应该存储promise而不是整个对象。 2)saveRegulationInstallationTypes(result).then(console.log('saved!'));应该是saveRegulationInstallationTypes(result).then(function(){console.log('saved!')});