通过$ http加载数据时,延迟对象返回错误的结果

时间:2014-06-26 16:51:53

标签: angularjs deferred

我有一个工厂,用于在Angularjs中使用json$http从文件中加载$q数据。

App.factory('dataLoader', ['$http', '$q', function($http, $q){
        var deferred = $q.defer(),
            data = {};

        return function (url){
            data = $http.get(url)
                .success(function(response){
                  deferred.resolve(response);
                })
                .error(function(){
                  deferred.reject('could not load template');
                });
            return deferred.promise;
        }

    }]);

问题:无处不在我使用此工厂加载数据,它只返回第一个使用结果。例如:

加载文件1:

dataLoader('json-folder/file-one.json').then(function(data){
        console.log('result1: ', data);
    });

加载文件2:

dataLoader('json-folder/file-two.json').then(function(data){
        console.log('result2: ', data);
    });

在控制台中,我只为两者提供了file-one.json的内容。我该如何修复dataLoader工厂?

1 个答案:

答案 0 :(得分:1)

承诺只能解决一次。此外,角度服务是单身人士,因此您可以为整个应用程序分享相同的承诺。

尝试在返回的函数中创建promise。