$ resource不是同步的,尽管此语法可能表明它是:
$scope.twitterResult = $scope.twitter.get();
这到底是怎么回事是调用AngularJS会,号召后
twitter.get(), 其结果是空数组立即返回。
然后,当异步调用完成并且真实数据从服务器到达时,该数组将使用data更新。AngularJS只会保留对返回数组的引用,并在有数据时将其填充。
这是发生“魔术”的$
resource实现的片段:https
:
//github.com/angular/angular.js/blob/master/src/ngResource/resource.js#L372
$ resource文档
中也对此进行了描述:
重要的是要意识到调用$
resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常资源会分配给模型,然后由视图呈现。如果对象为空,则不会进行渲染,一旦数据从服务器到达,该对象就会被数据填充,并且视图会自动重新渲染以显示新数据。这意味着在大多数情况下,无需为动作方法编写回调函数。



