我编写了一个自定义的角度服务,该服务在对WCF服务进行呼叫后返回了会话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”,但我得到的是“ {}”
答案 0 :(得分:1)
$http.post
返回一个promise,这就是您的服务方法所返回的
更改
$scope.export.sessionId = RPCService.Login(req);
收件人
RPCService.Login(req).then(function(data){
$scope.export.sessionId = data;
})
答案 1 :(得分:1)
错误处理程序的签名错误:
错误
return $http.post(url_login, request) .then(function (result) { return result.data; }, function (data, status) { console.log(data + status); });
更好
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);
//IMPORTANT re-throw error
throw response;
});
在拒绝处理程序中重新引发错误很重要。否则,被拒绝的承诺将被转换为价值为undefined
的已实现承诺。
答案 2 :(得分:0)
添加用于错误回调的单个参数,然后在调用方上将promise访问器与.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;
});