如何使用promise返回数据
收到错误,成功数据不是我的 Controller 中的函数,我不知道我做错了什么。我是否错过了 Controller 中的某些内容?
我通过调试观察到应用程序响应正在投入使用,但没有任何返回
var module = angular.module('app', []);
module.service("webservice", function($http,$q) {
return {
callservice:function(method,url,_data){
var deferred = $q.defer();
var promise = deferred.promise;
$http({
method: method,
url: App_Service_api+url,
data: _data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).
success(function (data, status, headers, config) {
if (data.success) {
deferred.resolve(data.message);
//return deferred.promise;
promise.successdata = function(fn) {
promise.then(fn);
return deferred.promise;
}
}
else {
deferred.reject("Plase Enter valid data.");
//return deferred.promise;
promise.errordata = function(fn) {
alert("error");
promise.then(null, fn);
return deferred.promise;
}
}
}).
error(function(data, status, headers, config){
deferred.reject("Plase Enter valid data.");
//return deferred.promise;
promise.errordata = function(fn) {
promise.then(null, fn);
return deferred.promise;
}
});
}
}
})
这是我的 Controller 代码
webservice.callservice('POST',App_Service_login,inputs).successdata(function(data){
var alertPopup = $ionicPopup.alert({
title: 'Login Succesfull!',
template: 'Please check your credentials!'
});
})
.errordata(function(data) {
var alertPopup = $ionicPopup.alert({
title: 'Login failed!',
template: 'Please check your credentials!'
});
});
最佳答案
我重构了一些你的代码。真诚地,我不明白为什么要创建函数 successdata
和 errordata
。您可以尝试更简单的方法,如下所示:
服务:
module.service("webservice", function($http, $q) {
return {
callservice: function(method, url, _data){
var deferred = $q.defer();
$http({
method: method,
url: App_Service_api + url,
data: _data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).
success(function (data, status, headers, config) {
if (data.success) {
deferred.resolve(data.message);
}
else {
deferred.reject("Plase Enter valid data.");
}
}).
error(function(data, status, headers, config){
deferred.reject("Plase Enter valid data.");
});
return deferred.promise;
}
}
});
Controller :
webservice.callservice('POST', App_Service_login, inputs).then(function(dataMessage){
console.log('dataMessage', dataMessage);
var alertPopup = $ionicPopup.alert({
title: 'Login Succesfull!',
template: 'Please check your credentials!'
});
})
.catch(function(errorMessage) {
console.log('errorMessage', errorMessage);
var alertPopup = $ionicPopup.alert({
title: 'Login failed!',
template: 'Please check your credentials!'
});
});
更新:
这个服务
代码应该通过在服务器端返回correct http status code进行一些修复来改进。 。通过此更改,当出现一些验证错误时,您应该返回 Status 400 Bad Request
和 data.message = 'Please Enter,而不是返回属性
。这样做时,您应该从响应中删除属性 data.success = false
有效数据'data.success
, Controller 将保持不变,并且您的服务将变为:
服务:
module.service("webservice", function($http, $q) {
return {
callservice: function(method, url, _data){
return $http({
method: method,
url: App_Service_api + url,
data: _data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}
}
});
A response status code between 200 and 299 is considered a success status and will result in the success callback being called. Note that if the response is a redirect, XMLHttpRequest will transparently follow it, meaning that the error callback will not be called for such responses.
关于angularjs - 如何在 Angular JS 中使用 $q 返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215228/