返回对象时,以下内容未定义

时间:2014-01-02 12:03:16

标签: javascript angularjs

我有一个函数:

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函数中的对象相同,为什么在返回时它是未定义的。

2 个答案:

答案 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”。这个词是保留的..