Javascript AngularJS Promise将解析值添加到$$v,而不是转换为对象

Javascript AngularJS Promise将解析值添加到$$v,而不是转换为对象,javascript,angularjs,Javascript,Angularjs,我注意到如果我这样做: var myItem = getObject(); console.log( myItem ); function getObject() { var def = $q.defer(); $http.get('my_url').success(function(result) { def.resolve( result); } ); return def.promise; } 发生这种情况时,ajax请求按预期发出,但是在控制台

我注意到如果我这样做:

var myItem = getObject();
console.log( myItem );

function getObject()
{
  var def = $q.defer();
  $http.get('my_url').success(function(result)
   {
      def.resolve( result); 
   } );

  return def.promise;
}
发生这种情况时,ajax请求按预期发出,但是在
控制台.log
行中,它实际上记录了一个承诺,该承诺具有一个
$$v
值,ajax请求返回的所有json数据都附加到该值

因此,它实际上并不将promise对象转换为返回的json数据,而是将其作为
$$v
变量添加


是否有任何方法可以更改此行为并将对象完全转换为结果?

$http.get已返回承诺,因此您可以执行以下操作:

function getObject()
{
   return $http.get('my_url')
}
在以下代码中,console.log不会等待promise解析,它只是打印出一个promise对象:

var myItem = getObject();
console.log( myItem );
相反,您需要传递一个回调函数:

getObject().success(function(data){
  $scope.myVar = data;
}

这不是我的问题,我的问题是,有没有一种方法可以在ajax请求完成后,将承诺完全更改为请求的返回值?e、 g
item=$http.get();警报(项目值)查看问题中的代码,我认为这是正确的答案。调用
console.log
且$$v应为空时,承诺未得到解决。但是,一旦在控制台中展开对象,它可能已经被加载,并且$$v值已填充。在任何情况下,您都应该在解析之后而不是之前执行console.log,以实际访问响应。@ClickUpvote检查更新的答案,您可以在解析承诺后将数据分配给变量,