Angularjs 角度类型错误:无法读取属性';然后';未定义的

Angularjs 角度类型错误:无法读取属性';然后';未定义的,angularjs,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; } 在控制器中调用它来初始化

我有这样的数据服务:

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:无法读取未定义的'then'属性”。回调中的Console.log(data)显示200“OK”响应和我期望的数据。我已经搜索了这个错误,主要是因为没有返回服务中的承诺。然而,我要回报我的承诺。在回调中设置控制器作用域上的任何内容都会导致错误

角度版本:AngularJS v1.3.0-rc.2


谢谢

在这种情况下,您不需要返回承诺,因为您使用的是回调。回电和承诺是两个极端。你可以用这个简单地完成你想要的

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

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;               
    }
});

你能发布回调函数吗?另外,不需要为变量赋值,因为它已经是一个承诺,您可以直接调用。然后在它上。您可以提供一个plunkr或更多上下文吗?这段代码似乎不应该抛出TypeError.+1,这是处理回调的更好方法。实际上,我发现我的应用程序包含了另一个版本(v1.2.20)中的“ngAnimate”。我不再需要它了,所以我把它拿了出来,突然就不再有类型错误了。我有一个
$http
调用和
.then(function(res){return res;})的服务
并从我拥有
serviceName.functionName()的控制器调用它。然后(函数(res){//do something with res})
,但我一直得到
无法读取未定义的属性“then”,尽管它以前工作过。。。原因可能是什么?