在控制器中使用 $q.defer 函数 return 不同的响应并解析
Function return different response using $q.defer in controller and resolve
我使用状态提供程序创建了一个状态,我使用了 resolve
,我使用工厂调用了 api。
.state('Test', {
url: '/Test/:testId',
templateUrl: TEMPLATE_URL + 'Test/test.html',
controller: "testController",
resolve: {
getTest : function($stateParams,TestFactory){
return testFactory.getTest($stateParams.testId);
},
testId: ['$stateParams', function ($stateParams) {
return $stateParams.testId;
}]
}
});
})
我创建了一个工厂,它有一个函数 (getTest),return 对象
getTest : function(parmTestId){
var deferred = $q.defer();
$http.get(API_URL + "Test/testById?testId="+parmTestId).success(deferred.resolve)
.error(deferred.resolve);
return deferred.promise;
}
我已经创建控制器,注入提供者
.controller("testController", function($scope,$rootScope,$http,getTest,testId, TestFactory ){
console.log(getTest); // its work perfectly and return json object
var returnObj = TestFactory.getTest(testId); //I called factory function
console.log(returnObj)//its not return object its return Promiss
}
我无法理解当我通过状态解析调用时,它的 return json 对象是 api 调用的 return 但是当我调用控制器不会重新运行 json 对象。
它的 return
Promise {$$state: Object}
$$state: Object
status: 1
value: Object
__proto__: Object
__proto__: Promise
值中有我想要的实际结果(json对象)
问题是在这两种情况下,为什么它的 return 不同的对象?
提前谢谢你。如果你不明白这一点,我会在评论中讨论。
它正在返回一个等待处理的 promise 对象!
您可以使用 .then(successCallback, errorCallback)
同样的:
var returnObj = TestFactory.getTest(testId).then(
function(res) {
// The 1st argument passed in this function is the response object
console.log(res);
},
function(err) {
// This is called in case the request fails
console.log('Some error: ', err);
}
);
此外,在您的 getTest
方法中发现了错误:
$http.get(API_URL + "Test/testById?
testId="+parmTestId).success(function(res) { deferred.resolve(res); })
.error(function(err) { deferred.reject(err); });
return deferred.promise;
deferred.resolve和deferred.reject是方法,必须要调用!
当你使用
.then(function(res){
..
},function(err){
....
});
它的 return res 对象有状态,数据,....等所以你可以从 res.data
当您使用
.success(function(res){
.......
});
其返回实际数据数据。
我使用状态提供程序创建了一个状态,我使用了 resolve
,我使用工厂调用了 api。
.state('Test', {
url: '/Test/:testId',
templateUrl: TEMPLATE_URL + 'Test/test.html',
controller: "testController",
resolve: {
getTest : function($stateParams,TestFactory){
return testFactory.getTest($stateParams.testId);
},
testId: ['$stateParams', function ($stateParams) {
return $stateParams.testId;
}]
}
});
})
我创建了一个工厂,它有一个函数 (getTest),return 对象
getTest : function(parmTestId){
var deferred = $q.defer();
$http.get(API_URL + "Test/testById?testId="+parmTestId).success(deferred.resolve)
.error(deferred.resolve);
return deferred.promise;
}
我已经创建控制器,注入提供者
.controller("testController", function($scope,$rootScope,$http,getTest,testId, TestFactory ){
console.log(getTest); // its work perfectly and return json object
var returnObj = TestFactory.getTest(testId); //I called factory function
console.log(returnObj)//its not return object its return Promiss
}
我无法理解当我通过状态解析调用时,它的 return json 对象是 api 调用的 return 但是当我调用控制器不会重新运行 json 对象。 它的 return
Promise {$$state: Object}
$$state: Object
status: 1
value: Object
__proto__: Object
__proto__: Promise
值中有我想要的实际结果(json对象) 问题是在这两种情况下,为什么它的 return 不同的对象?
提前谢谢你。如果你不明白这一点,我会在评论中讨论。
它正在返回一个等待处理的 promise 对象!
您可以使用 .then(successCallback, errorCallback)
同样的:
var returnObj = TestFactory.getTest(testId).then(
function(res) {
// The 1st argument passed in this function is the response object
console.log(res);
},
function(err) {
// This is called in case the request fails
console.log('Some error: ', err);
}
);
此外,在您的 getTest
方法中发现了错误:
$http.get(API_URL + "Test/testById?
testId="+parmTestId).success(function(res) { deferred.resolve(res); })
.error(function(err) { deferred.reject(err); });
return deferred.promise;
deferred.resolve和deferred.reject是方法,必须要调用!
当你使用
.then(function(res){
..
},function(err){
....
});
它的 return res 对象有状态,数据,....等所以你可以从 res.data
当您使用
.success(function(res){
.......
});
其返回实际数据数据。