1

我正在使用最新的 Angular.js,1.1.5,它通过资源调用返回承诺。当您有多个请求之后将有另一个依赖于这些请求的请求时,正确的实现是什么?

$scope.save = function() {
    var newids = [];
    angular.forEach ($scope.template.children, function (value){
        //saves the children as a new template and returns the ID
        Template.$addNew(value).then(
            function( value ){newids.push(value);},
            function ( error ) {console.log ('error')}
        )
    });

    //updates the root template
    $scope.template.childrenIDs = newids;
    Template.$update($scope.template).then(
            function( value ){ console.log('successfully saved')},
            function ( error ) {console.log ('error')}
        )
}

为此,我收到一个错误:

TypeError: Object # has no method 'then'

模板是以下工厂返回资源:

mongoAPI.
factory('Template', ['$resource', '$http', 'CONSTANTS', 'security', function($resource, $http, CONSTANTS, security) {
    var actions = {                        
        'addNew': {method:'POST'},   
    }
    var res = $resource(CONSTANTS.url, {}, actions)
    return res;
}]); 
4

2 回答 2

5

供参考

从 1.2.0 开始$resource公开一个$promise

Template.$addNew(value).$promise.then(
    function( value ){newids.push(value);},
    function ( error ) {console.log ('error')}
)

文档

于 2013-12-03T14:41:58.577 回答
2

完全暴露的 Promise 目前仅在 master 中可用(提交https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d)。

从 1.1.3 开始,$resource通过(同样是 $resolved)暴露了 Promise 的then功能:$then

Template.$addNew(value).$then(
    function( value ){newids.push(value);},
    function ( error ) {console.log ('error')}
)
于 2013-06-28T10:55:16.873 回答