0

我注意到,如果我执行以下操作:

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 请求按预期发出,但是在该console.log行中,它实际上记录了一个 Promise,该 Promise 具有一个$$v值,ajax 请求返回的所有 json 数据都附加到该值上。

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

有什么办法可以改变这种行为并使对象完全转化为结果?

4

1 回答 1

1

$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;
}
于 2013-08-28T06:52:19.107 回答