如何将AngularJS的$resource调用存储在一个数组中,然后一起执行
How store AngularJS $resource calls in an array to execute all together after?
我正在使用AngularJS 1.5(我是JS的初学者)在用户配置文件视图中工作,用户可以在他的数据中更改很多东西。
在这个视图中,数据被分成几个部分,保存所有这些数据意味着对服务器进行多次调用(由于应用程序的设计)。我发现的问题是当用户修改数据时可能只修改其中的一部分当它按下保存按钮时我不想调用所有的方法,只调用必要的方法
我已经编写了一种方法,当用户按下保存按钮时检测数据块中的变化,有时控制器进行调用,在其他情况下进行两次或三个调用。但问题是调用(使用$resource library)是异步执行的,我希望可以更好地控制这一点。
我想做下一个:将所有调用存储在列表或数组中,但不执行它们,然后同时执行所有调用(或多或少)。如果这些都失败了,我想向用户显示一个错误消息(只是一个通用的错误消息),但在内部记录失败的调用,并以同样的方式只显示(而且只有一个)成功消息,当所有调用都以成功结束时(而不是每个成功调用的消息)。
我不知道如何做到这一点,一些朋友告诉我,也许我需要使用$q AngularJS服务来做到这一点,或者存储$resource必须执行的所有承诺(我尝试过没有成功)或在JS中使用承诺。
谁能给我点主意?最后我用$q解决了这个问题。起初我想存储调用而不执行它们(我认为这样更好),但最后我可以检查仅存储此调用的结果是否足以满足我的目标。所以,这是我已经完成的解决方案的框架:
控制器开头
var promises = [];
在所有需要在save user data函数内进行受控调用的地方:
var deferred = $q.defer();
var promise = vm.teacher.$update(
function () { // Success
deferred.resolve('Success updating the teacher.');
},
function (error) { // Fail
deferred.reject('Error updating the teacher, error: ' + error)
});
promises.push(deferred.promise)
}
...
... vm.otherItems.$update ...
...
在这个函数的末尾,像这样:
$q.all(promises).then(
function(value){
console.log('Resolving all promises, SUCCESS, value: ')
console.log(value);
toastService.showToast('Success updating the teacher.');
// It deleted old promises for next iteration (if it exists)
promises = [];
},function(reason){
console.log('Resolving all promises, FAIL, reason: ')
console.log(reason);
toastService.showToast('Fail updating the teacher.');
}
)
谢谢你的帮助!
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- JavaScript数组包含一个值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery$.inArray()总是返回-1和一个对象数组
- 在数组中的一个元素上设置多个值
- javascript处理一个对象数组以获得一个新的对象数组
- 作为一个二维数组,从ajax接收
- 你能用来自数组的属性名称生成一个对象吗
- 多维关联数组的最后一个索引
- 如何创建一个方法来验证数组的范围
- 循环以检查数组中的最后一个图像
- 在Javascript中将一个值和字符串数组转换为if语句
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何将一个对象添加到每个对象数组中
- 如何创建一个谷歌地图地理坐标数组
- 如何从另一个带下划线的数组中筛选带元素的数组
- 使用window.location.htm和匹配的URL数组(一个用于桌面,一个用于移动)将桌面网站重定向到移动
- Javascript排序多维数组-一个完整的例子
- 刽子手的游戏.2数组.一个需要相应地更新另一个