Angularjs 我试图将数据从自定义angular JS服务返回到控制器,但它总是返回";{};

Angularjs 我试图将数据从自定义angular JS服务返回到控制器,但它总是返回";{};,angularjs,angularjs-service,angularjs-http,Angularjs,Angularjs Service,Angularjs Http,我已经编写了一个自定义angular服务,它在对WCF服务进行post调用后返回会话id。我可以在chrome的网络选项卡上看到调用返回了会话id,但是当我试图通过$http.post将其返回给调用方时,它返回了“{}”对象 我已经在stackoverflow等中跟踪了与此问题相关的所有问题/答案,但没有结果。我知道在处理电话回信时出现了问题,但我不知道,也无法确定问题出在哪里 这是定制服务 angApp.service('RPCService', function($http) {

我已经编写了一个自定义angular服务,它在对WCF服务进行post调用后返回会话id。我可以在chrome的网络选项卡上看到调用返回了会话id,但是当我试图通过$http.post将其返回给调用方时,它返回了“{}”对象

我已经在stackoverflow等中跟踪了与此问题相关的所有问题/答案,但没有结果。我知道在处理电话回信时出现了问题,但我不知道,也无法确定问题出在哪里

这是定制服务

angApp.service('RPCService', function($http) {

    var url_login = 'http://xxxxxxx';

    this.Login = function(request) {

        return $http.post(url_login, request)
                            .then(function (result) {
                                return result.data;
                                },
                            function (data, status) {
                                console.log(data + status);
                            });

    };
我是来电者

angApp.controller('exportController', ['$scope', 'RPCService', function ($scope, RPCService) {

    $scope.export = {};

    $scope.exportLogin = function(){

        var req = {
                    "SiteId" : $scope.export.xxx,
                    "UserName" : $scope.export.xxx,
                    "Password" : $scope.export.xxx
                    };

        $scope.export.sessionId = RPCService.Login(req);
    };

我希望输出为“SessionId”:“xxxxxxxx”,但我得到的是“{}”

$http.post
返回一个承诺,这就是您的服务方法返回的承诺

改变

$scope.export.sessionId = RPCService.Login(req);


$http.post
返回一个承诺,这就是您的服务方法返回的承诺

改变

$scope.export.sessionId = RPCService.Login(req);


错误处理程序的签名错误:

错误的

  return $http.post(url_login, request)
                        .then(function (result) {
                            return result.data;
                            },
                        function (data, status) {
                            console.log(data + status);
                        });
更好

返回$http.post(url\u登录,请求)
.然后(函数(结果){
返回结果数据;
},
功能(响应){
var数据=响应数据;
var status=response.status;
console.log(数据+状态);
//重要重发错误
投掷反应;
});

在拒绝处理程序中重新抛出错误很重要。否则,被拒绝的承诺将转换为值为
未定义的已履行承诺
错误处理程序的签名错误:

错误的

  return $http.post(url_login, request)
                        .then(function (result) {
                            return result.data;
                            },
                        function (data, status) {
                            console.log(data + status);
                        });
更好

返回$http.post(url\u登录,请求)
.然后(函数(结果){
返回结果数据;
},
功能(响应){
var数据=响应数据;
var status=response.status;
console.log(数据+状态);
//重要重发错误
投掷反应;
});

在拒绝处理程序中重新抛出错误很重要。否则,被拒绝的承诺将转换为已履行的承诺,其值为
undefined

添加用于错误回调的单个参数,然后使用承诺访问器with.then关键字解决调用方的问题。下面是代码

this.Login = function(request) {

    return $http.post(url_login, request)
                        .then(function (result) {
                            return result.data;
                            },
                        function (response) {
                            var data = response.data;
                            var status = response.status;
                            console.log(data + " | " + status);
                            throw response;
                        });

};
在控制器上

RPCService.Login(req).then(function(data){
       $scope.export.sessionId = data.SessionId;
    });

为错误回调添加单个参数,然后在调用者上使用带有.then关键字的promise访问器修复了该问题。下面是代码

this.Login = function(request) {

    return $http.post(url_login, request)
                        .then(function (result) {
                            return result.data;
                            },
                        function (response) {
                            var data = response.data;
                            var status = response.status;
                            console.log(data + " | " + status);
                            throw response;
                        });

};
在控制器上

RPCService.Login(req).then(function(data){
       $scope.export.sessionId = data.SessionId;
    });

我已经试过了,错误是函数没有定义“then”函数。我不在我的系统前面,但会分享实际的错误。谢谢你的输入。我已经尝试过了,错误是函数没有定义“then”函数。我不在我的系统前面,但会分享实际的错误。谢谢你的输入。不,没有工作。它仍然将输出显示为“{}”。在我添加了带有一个参数的错误响应回调函数并使用带有.then构造的登录调用来读取承诺之后,它就工作了。谢谢georgeawg和@charlietfl的支持。没有。它仍然将输出显示为“{}”。在我添加了带有一个参数的错误响应回调函数并使用带有.then构造的登录调用来读取承诺之后,它就工作了。感谢georgeawg和@charlietfl的支持。