Angular TypeError:无法读取未定义的属性'then'

时间:2014-10-04 01:37:14

标签: angularjs

我有这样的数据服务:

this.myFunction= function(callback) {
    var url = rootURL + "path1/path2/service.json";
    var promise = $http.get(url);
    promise.then(function(payload){
        return callback(payload); 
    });
    return promise; 
}

在控制器中调用它来初始化一些东西:

DataService.myFunction(function(data) { 
    if(data.statusText !== "OK"){
        $scope.$worked= false; 
    }else{  
        $scope.$worked= true;               
    }
}

我得到" TypeError:无法读取属性'然后'未定义"。回调中的Console.log(数据)显示200" OK"响应和我期望的数据。我已经搜索过这个错误,主要是因为没有在服务中返回promise。但是,我还没有回复诺言。在回调中的控制器范围上设置任何内容都会导致错误。

Angular版本:AngularJS v1.3.0-rc.2

谢谢!

1 个答案:

答案 0 :(得分:22)

在这种情况下,您不需要返回承诺,因为您正在使用回调。回调和承诺是频谱的两端。你可以用这个完成你想要的任务。

如果您想使用回调,可以保留控制器代码。

this.myFunction= function(callback) {
    var url = rootURL + "path1/path2/service.json";
    $http.get(url).then(function(response) {
        callback(response.data);
    });
}

或者如果你想利用承诺

this.myFunction= function() {
    var url = rootURL + "path1/path2/service.json";
    return $http.get(url).then(function(response) {
        return response.data;
    });
}

DataService.myFunction().then(function(data) { 
    if(data.statusText !== "OK"){
        $scope.$worked = false; 
    } else {  
        $scope.$worked = true;               
    }
});