我有一个函数:
1: var object = get_resource($scope, CbgenRestangular, $stateParams.scheme_id);
2: console.log(object)
哪个运行:
get_resource = function ($scope, CbgenRestangular, id){
CbgenRestangular.one('scheme', id).get().then(function(object){
console.log(object)
return object
})
},
我的问题是在get_resource
函数console.log
内返回对象完美,但上面代码中的第2行是undefined
,为什么?
这应该与get_resource
函数中的对象相同,为什么在返回时它是未定义的。
答案 0 :(得分:2)
函数get_resource
没有返回语句,因此您得到undefined
并不奇怪。你在传递给then
函数的函数中有一个return语句,但是这并没有从" outer"功能
你在这里处理的是承诺。 get
函数显然返回了一个承诺:
var promise = CbgenRestangular.one('scheme', id).get();
要获得该承诺的结果,您可以使用then
函数,就像在get_resource
函数中一样。
现在,如果你想在这个函数之外处理这个promise,你可以简单地返回promise,然后做同样的事情:
get_resource = function ($scope, CbgenRestangular, id){
return CbgenRestangular.one('scheme', id).get().then(function(object){
console.log(object)
return object
})
},
//.....
var promise = get_resource($scope, CbgenRestangular, $stateParams.scheme_id);
promise.then(function (object) {
console.log(object);
});
答案 1 :(得分:1)
Javascript asychronous 。这一点很重要。 这意味着如果你调用一个执行ajax调用的函数(一个长时间运行的进程),你需要一个回调。
您的代码无法正常工作,因为您具有调用其他功能的功能。第二个函数然后返回一个对象。但是函数1不知道,所以它立即返回(未定义)。
这应该有用。
get_resource = function ($scope, CbgenRestangular, id, _callback){
CbgenRestangular.one('scheme', id).get().then(function(object){
_callback(object);
})
},
get_resource($scope, CbgenRestangular, $stateParams.scheme_id,function(_obj){
console.log(obj)
});
顺便说一下,你永远不应该命名变量“object”。这个词是保留的..