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

时间:2017-05-13 10:02:14

标签: angularjs asp.net-web-api

我在使用angularjs获取web api请求时遇到错误。可以对此发表任何评论。

$scope.getSelections = function () {
                    var user = ($scope.userInfo.userName).toString();
                    selectionsaveSrv.getSelections(user).then(function (data) {
                        var data = data;
                    });
                }

服务:

function selectionsaveservice(appConfig, $q, fSrv, localStorageService, adalAuthenticationService, $http) {


getSelections = function (user) {
    var user = user;
    var webApiuri = appConfig.webApiUri + '/UserPreferences/GetSelections';
    $http.get(webApiuri, { params: { UserName: user } }).
    success(function (data, status, headers, config) {
        return data;
    }).
    error(function (data, status, headers, config) {
    });
}

return { getSelections: getSelections }

}

2 个答案:

答案 0 :(得分:1)

根据角度文档。成功和错误方法不再可用。这些方法已经过折旧,但他们建议使用标准的 .then 方法。

更改服务中的 getSelections 方法,如下所示,

getSelections = function (user) {
    var user = user;
    var webApiuri = appConfig.webApiUri + '/UserPreferences/GetSelections';    
    $http.get(webApiuri, { params: { UserName: user } }).
    .then(function(response){
         if(response.status === 200) {
             return response.data;
         }
    }, function(error) {
        console.log(error)
    });
}

答案 1 :(得分:1)

由于错误明确指出无法读取属性'然后'未定义的,错误背后的原因是.then方法在promise对象上可用,并且您期望从getSelections方法获得承诺。通过从getSelections方法返回承诺应该可以解决您的问题。

getSelections = function (user) {
    var user = user;
    var webApiuri = appConfig.webApiUri + '/UserPreferences/GetSelections';
    return $http.get(webApiuri, { params: { UserName: user } });
}
  

注意:请勿使用successerror回调,因为他们已弃用