我正在尝试 return 来自自定义 angular JS 服务的数据到控制器,但它总是 returning "{}"
I am trying to return a data from custom angular JS service to the controller but it is always returning "{}"
我编写了一个自定义 angular 服务,在对 WCF 服务进行 post 调用后,该服务 return 是会话 ID。我可以在 chrome 的网络选项卡上看到该呼叫已 return 编辑了会话 ID,但是当我尝试通过 $http.post 将其 return 发送给呼叫者时returns“{}”对象。
我已经在 Whosebug 等中关注了与此问题相关的所有 questions/answers,但无济于事。我知道 return 调用 return 的 promise 处理存在问题,但我不知道也无法查明哪里出了问题。
这是定制服务。
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
returns 一个承诺,这就是您的服务方法返回的内容
改变
$scope.export.sessionId = RPCService.Login(req);
至
RPCService.Login(req).then(function(data){
$scope.export.sessionId = data;
})
错误处理程序的签名错误:
ERRONEOUS
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
.
的已履行的承诺
为错误回调添加单个参数,然后在调用者上使用带有 .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;
});
我编写了一个自定义 angular 服务,在对 WCF 服务进行 post 调用后,该服务 return 是会话 ID。我可以在 chrome 的网络选项卡上看到该呼叫已 return 编辑了会话 ID,但是当我尝试通过 $http.post 将其 return 发送给呼叫者时returns“{}”对象。
我已经在 Whosebug 等中关注了与此问题相关的所有 questions/answers,但无济于事。我知道 return 调用 return 的 promise 处理存在问题,但我不知道也无法查明哪里出了问题。
这是定制服务。
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
returns 一个承诺,这就是您的服务方法返回的内容
改变
$scope.export.sessionId = RPCService.Login(req);
至
RPCService.Login(req).then(function(data){
$scope.export.sessionId = data;
})
错误处理程序的签名错误:
ERRONEOUS
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
.
为错误回调添加单个参数,然后在调用者上使用带有 .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;
});