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

Dra*_*oon 13 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; 
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢!

Zac*_*yle 22

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

如果要使用回调,可以保留控制器代码.

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

或者如果你想利用这些承诺

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;               
    }
});
Run Code Online (Sandbox Code Playgroud)

  • +1用于处理回调的更好方法.我实际上发现我的应用程序包含来自另一个版本(v1.2.20)的'ngAnimate'.我不再需要它,所以我把它拿出来,突然间没有更多的类型错误. (2认同)