TypeError:promises [i] .done不是函数

时间:2015-06-22 12:08:50

标签: angularjs

我将$ http.get对象从服务返回到控制器。

geturl服务中的函数 -

    this.fetch = function(index){
      var url = some_url;
      return $http.get(url,{timeout:8000});
    };

在控制器中我有 -

    var request = geturl.fetch(0);
    request.success(function(data,status,headers,config){
        // some logic
    }).error(function(data,status,headers,config){
        // some logic
    });

    $scope.promise.push(request); // $scope.promise is an array which contains all the promises

    whenAll($scope.promise).done(function(){
    });

功能whenAll -

    function whenAll(promises) {
    var i, data = [],
    dfd = $.Deferred();
    for (i = 0; i < promises.length; i++) {
        promises[i].done(function(newData) {
            // something
        }).fail(function() {
          //something
        });
    }
    return dfd.promise();
    }

我收到以下错误 - TypeError:promises [i] .done不是函数

2 个答案:

答案 0 :(得分:2)

如果你想在所有承诺解决时执行某些事情......

...你应该看看$ q.all()

享受!

答案 1 :(得分:0)

这不是我应该说你必须使用$ q服务的角度方式。: -

   $q.all([Your array]).then(function(values) {
        //Your code
    });

服务: -

this.fetch = function(index){
    var url = some_url;
    var def = $q.defer();
    $http.get(url,{timeout:8000}).success(function(data) {
             def.resolve(data);
            })
            .error(function() {
                def.reject("Failed to get albums");
            });
        return def.promise;;
};

控制器: -

var promises = [];
var promise1 = geturl.fetch(0);
var promise2 = geturl.fetch(1);
promises.push(promise1);
promises.push(promise2);  
 $q.all(promises).then(function(results){

});

希望有所帮助:)