在 AngularJS 中使用承诺的多个资源调用
Multiple resource calls with promises in AngularJS
我正在开发一个简单的AngularJS应用程序,该应用程序对用户进行身份验证并显示与用户关联的事务列表。此外,还有一个下拉列表,允许用户按年份过滤交易。组合框模型是我通过 AngularJS 资源从 API 检索的值数组,但仅在我检索当前用户之后。这是代码:
//retrieve the user
UserManagement.getCurrentUser().then(function (user) {
//retrieve the transactions
$scope.transactions = Transactions.query({
userid: user.UserName,
status: $scope.status
});
//retrieve the array for the dropdown
//and return a promise
return TimeFilters.get({
userid: user.UserName,
status: $scope.status,
timefilter: 'years'
});
}).then(function (years) {
//set a scope variable to the array to bind in the view
$scope.timefilters.years = years;
console.debug(years);
//set also the currently selected year
$scope.timefilters.currentYear = $scope.timefilters.years[0];
})
尽管我今天学到了承诺,也许我误解了一些东西,但这段代码似乎很简单。
问题是,当我尝试将currentYear
分配给timefilters.years
的第一个元素时,分配失败,因为数组仍然为空,即使它不应该为空,因为我试图在.then
函数中分配。结果是下拉列表填充了年份,但没有选择年份。
我在这里误解了什么?
顺便说一句,资源调用返回预期数据,因此这不是问题。
编辑:发布后,我将第一then
中的返回语句更改为:
return TimeFilters.get({...}).$promise
现在它按检查工作。但我认为$resource.get已经打算回报一个承诺了。我真的很困惑。有人可以澄清一下吗?
Angular $resources docs 给出了答案:
重要的是要认识到调用$resource对象方法 立即返回一个空引用(对象或数组取决于 isArray)。一旦数据从服务器返回,现有的 引用填充实际数据。
和:
资源实例和集合具有以下附加 性能:
$promise:原始服务器交互的承诺 此实例或集合。
成功后,将使用相同的资源实例或 集合对象,使用来自服务器的数据进行更新。
因此,在调用 $resource.get() 时,确实希望获得对空Object
或Array
的引用之类的内容。只有有了$resource.get().$promise
你才会收到 deisred promse 对象。
- AngularJS多资源调用,只处理最后一个
- HTML客户端可移植文件生成-无外部资源或服务器调用
- 区分对$http的应用程序调用和 Angular 对拦截器中静态资源的请求
- 资源查询调用执行计时
- 如何将调用传递回角度资源保存方法
- 无法在 ajax 调用中加载资源
- VB调用javascript资源代码
- 未调用Angularjs资源工厂transformResponse
- 如何从其他web资源(html)调用web资源(html)函数
- 从另一个javascript网络资源调用javascript函数
- Angular.js资源rest调用错误TypeError:undefined不是函数
- Node.js页面刷新调用资源两次
- 在Javascript中调用资源文件
- 如何捕获“加载资源失败”;使用JQuery调用ajax导致的错误
- 如何从Rails资源管道中的不同文件调用JS函数
- 如何只在laravel中调用一个javascript资源
- 在Ajax调用期间处理丢失的图像资源
- 在AngularJS中,从两个资源调用中返回$promise来延迟路由更改
- 在 AngularJS 中使用承诺的多个资源调用
- Angular js资源调用来获取数组中的json数据