
我有一段发送双HTTP请求的代码,我希望首先提出身份验证请求,如果为真,执行下一条语句(只返回一个$http承诺)。我怎样才能在angularJS中做到这一点。到目前为止,它正在返回未定义的状态。
dmdb._login_request = function(credentials, conf) {
var p = {
'_method': 'POST',
'data[User][username]': credentials.login,
'data[User][password]': credentials.password
};
conf.headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
var userData = {
'username': 'mbah',
'password': 'abc@123',
'applicationid': '1'
};
$http.post('myapp.com/authenticate/', userData, con).success(function(data) {
if (data.success) {
return $http.post(this.url + 'users/login', $.param(p), conf);
}
return $q.when('failed');
})
};发布于 2017-02-23 18:39:22
我不太明白您的问题是什么,但是,看起来您正在尝试从一个承诺的函数中返回一些东西。
我建议您编写以下代码:
var userData={
'username':'mbah',
'password':'abc@123',
'applicationid':'1'
};
var deferred = $q.defer();
$http.post('myapp.com/authenticate/',userData,con).success(function(data){
if(data.success){
$http.post(this.url+'users/login',$.param(p),conf).success(function(data2){
deferred.resolve(data2);
})
}
// I dont understand what this is for
//turn $q.when('failed');
})
return deferred.promise;
};这样,您的函数将返回一个承诺,您可以使用您的目的。
如果对你没有帮助的话,请再详细说明一下
发布于 2017-02-24 09:45:49
my_obj._login_request = function (credentials,conf) {
var url_=this.url;
var p = {
'_method': 'POST',
'data[User][username]': credentials.login,
'data[User][password]': credentials.password
};
conf.headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'};
var userData={
'username':'mbah',
'password':'abc@123',
'applicationid':'1'
};
var deferred = $q.defer();
$http.post('auth/path/UserLogin/Login',userData).success(function(data){
console.log(data);
if(!angular.isDefined(data.status)){
deferred.resolve($http.post(url_+'/users/login',$.param(p),conf));
}
else{
deferred.reject();
}
})
return deferred.promise;
};这是我的最后一段代码,它作为expected.Thanks来帮助大家
https://stackoverflow.com/questions/42423235
复制相似问题