在这里,我已经发出了Http请求,并从第一个Service调用获得响应,并在第二个服务中传递第一个服务的响应,并获得响应和控制器。
我得到了回应,我怎么能进入控制器。
app.factory('logHomeService', function () {
var getHomeService = function (LoginService, HomeService) {
return
{
LoginService.After("user", encodeURIComponent("pass"))
.then(function (response) {
debugger;
$stateParams.User = "admin";
var mydata = response.CT1SessionObj;
var DefaultModelObj = { cobj: mydata};
HomeService.pageLoad(DefaultModelObj)
.then(function (response) {
$rootScope.CT1SessionObj = response.mydata;
}, function (response) {
console.log("LoginService" + response.data);
alert(response.Message);
});
},
function (response) {
console.log("Home Service" + response.data);
return response.data;
});
return response.data;
};
};
return {
getHomeService: getHomeService
}
});
app.Controller('HomeController',function($scope,logHomeService)
{
this.logHomeService = logHomeService;
}
这里this.logHomeService = logHomeService在工厂返回方法,我如何从第二个服务获得响应结果
我需要将home service response返回到controller,console.log(“Home Service”+ response.data);
答案 0 :(得分:1)
您需要使用promises,然后在控制器中侦听解决方案。
app.factory('logHomeService', function($q) {
var getHomeService = function(LoginService, HomeService) {
// create a promise object
var deferred = $q.defer();
LoginService.After("user", encodeURIComponent("pass")).then(
function(response) {
$stateParams.User = "admin";
var mydata = response.CT1SessionObj;
var DefaultModelObj = {
cobj: mydata
};
HomeService.pageLoad(DefaultModelObj).then(
function(response) {
$rootScope.CT1SessionObj = response.mydata;
// resolve the promise
deferred.resolve( response );
},
function(response) {
console.log("LoginService" + response.data);
// reject the promise if there is an error
deferred.reject( response );
alert(response.Message);
});
},
function(response) {
console.log("Home Service" + response.data);
// reject the promise if there is an error
deferred.reject( response )
});
// return the promise
return deferred.promise
};
return {
getHomeService: getHomeService
}
});
首先将$q
注入工厂。然后从getHomeService()
方法返回承诺。
承诺在3个地点解决,2次拒绝和1次解决。当呼叫失败时,拒绝可用于在控制器中执行某些操作。
接下来更新您的控制器以听取承诺。
app.Controller('HomeController', function($scope, logHomeService){
this.logHomeService = logHomeService;
this.logHomeService.getHomeService().then(
function(successResponse){
// success
},
function(failureResponse){
// failure
}
)
}
答案 1 :(得分:0)
@Thanks授予你我的一天。在工厂使用了两个服务,在服务中我使用了承诺,但我没有在工厂使用。
var service1 = function ($http, $q, configAPI) {
var crContractApi_Url = configAPI.crContractApi_Url;
this.pageLoad = function (params) {
var result = $q.defer();
params.obj.data = null;
$http({
method: 'POST',
url: baseurl + '/reatiler/retailer',
headers: { 'Content-Type': 'application/json' },
data: JSON.stringify(params)
})
.success(function (response) {
result.resolve(response);
})
.error(function (response) {
result.reject(response);
});
return result.promise;
}
就像在service2中使用的那样。是另一种方式