通过Web服务修改对象列表,如何获取最终值列表
Modify list of objects via WebService, how to get final Value List?
我从 Web 服务获取数据,我需要将此数据发送到另一个服务以修改某些值,因此当我获取数据时,需要进行更多的异步调用。我不知道如何获得最终值。
我想称呼:
SomeService.getSomething(id).then(function(something) {
SomeOtherService.addXToDatas(something.data).then(function(fixedData) {
$scope.data = fixedData;
});
});
我有什么:
someOtherService.addXToDatas = function(datas) {
datas.forEach(function(value, index, array) {
getSomethingFromApi(value.something).then(function(bla) {
array[index] = bla;
});
});
}
someOtherService.addXToData = function(data) {
getSomethingFromApi(data.something).success(function(response) {
order.someMore = response.data;
});
}
}
不幸的是,我没有实际的线索如何在javascript中完成此操作。对于单个对象,我可以使用回调,但对于对象列表?
Angular.js内置了Q的实现,所以你可以使用promise组合Q.all
。它接受一系列承诺,并返回一个承诺,当所有其他承诺都已实现时,该承诺已实现。
您可以使用 .map
而不是 .forEach
轻松地使用 Your 代码创建承诺数组:
someOtherService.addXToDatas = function(datas) {
return $q.all( datas.map(function(value, index, array) {
return getSomethingFromApi(value.something).then(function(bla) {
array[index] = bla;
});
})).then(function() {
return datas;
});
}
SomeOtherService.addXToDatas(something.data).then(function(fixedData) {
$scope.data = fixedData;
});
解释:
-
datas.map()
创造了一系列承诺。API 调用本身将异步执行。 -
$q.all()
返回一个承诺,当从 (1) 传递给它的所有承诺都得到履行时,该承诺就会实现。 - Final
then
返回修改后的数组data
。在 (1) 中的所有承诺都得到履行并且data
的所有修改都已完成之后,它被称为。
如果我
理解正确,您想要一个充满来自 addXToDatas
中异步调用的数据的数组,您可以这样做:
someOtherService.addXToDatas = function(datas) {
var promises = [];
datas.forEach(function(value, index, array) {
promises.push(
getSomethingFromApi(value.something)
);
});
return $q.all(promises);
}
在控制器中:
someOtherService.addXToDatas([data1, data2,data3])
.then(function(resultArray) {
console.log(resultArray);
});
$q.all(promises)
将返回一个包含 promise 值的数组(按顺序)。有关$q
和$q.all
的更多信息,请单击此处。
相关文章:
- 使用JavaScript在IE9中获取数据列表选项
- 如何递归地获取嵌套对象中所有子对象的列表
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- 如何在 Javascript/jQuery 中获取一些随机下拉列表的选定值
- 使用 jQuery 从下拉列表中获取所选文本
- 以编程方式获取无线接入点列表
- 如何在jquery中获取列表项的最顶端父项的文本
- 如何在JqWidgets网格中获取所有未选中行索引的列表
- 从javascript中的数组列表中获取值
- 如何从值的Angular下拉列表中获取ID
- 挖空剑道下拉列表获取所选项目的文本
- 如何从依赖下拉列表获取值到JavaScript并将其解析到另一个PHP页面
- 通过要按顺序获取的键列表获取嵌套键
- 从谷歌地图API列表获取最近的地方细节
- JQuery自动完成列表获取Json项目
- Jquery asp.net复选框列表获取项目值
- 基于选定的第一个下拉列表获取下拉列表的值
- jQuery可排序连接列表-获取列表id和数据值的排序值
- 样式下拉列表:获取兄弟元素的高度并求和
- 根据文本框中重新排列的无序列表获取值