如何在循环中链接Angular.JS的承诺
How to chain Angular.JS promises in a loop
我需要在javascript中设计一个函数,使请求POST多个项目到数据库。然后,我必须获取已返回的所有数据,并对数据库运行另一个$http
查询。
这是我的代码
var current_request=null;
var workorders=[];
$scope.submit_work_order=function(){
for(var i=0;i<$scope.parent_jobs.length;i++){
addPartAndWorkOrder(equipment_id,part_number,work_order,_id);
}
if(current_request!=null){
current_request.then(function(){
if(workorders.length>0){
$http({
url:'/api/salesorders',
method: "POST",
data: {'workorders':workorders}
})
}
});
}
function addPartAndWorkOrder(equipment_id,part_serial_number,work_order_id, job_id){
//part_serial_number
var info;
info=$http({url:'/api/parts',
method: "POST",
data: {'equipment':equipment_id});
if(current_request==null){
current_request=info;
}
else{
current_request.then(function(){
return info
});
});
}
current_request.then(function(data){
return $http({
url:'/api/workorders',
method: "POST",
data: {workorder_id:work_order_id, part:data._id,job:job_id}
}).then(function(data){
workorders.push(data._id);
});
})
}
我需要的是通过运行代码中的HTTP请求来填充数组workorders
。
然后我需要用数组
中的数据运行对端点api/salesorders/
的最后一个请求TL;博士
这是端点应该运行的方式
parts->workorders->parts->workorders->salesorder
这是他们运行的方式
parts->salesorder->workorders->parts->workorders
我试图继续添加到.then
,但由于它目前仍然失败
将调用分解为依赖树。看来你们的呼叫模式应该是这样的:
<>之前零件(1)->工单(data1) -> _id1\部分(2)——> workorders (data2)——> _id2——> salesorder ([_id1、id2 _id3])/零件(3)->工单(data3) -> _id3之前因此,单独地,parts-->workorder
必须顺序完成,但所有它们都可以并行地完成。
这是如何做到的(为了简洁,我省略了特定的API调用和参数):
function submitWorkOrder(){
var parent_jobs = [{}, {}, ]; // this is your array of jobs (however you get it)
var partsAndOrdersPromises = [];
parent_jobs.forEach(
function(job){
var promise = postPart(job).then(postWorkOrder);
partsAndOrdersPromises.push(promise);
});
var allPartsAndWorkordersPromise = $q.all(partsAndOrdersPromises);
return allPartsAndWorkordersPromise.then(postSalesOrder);
}
postSalesOrder
看起来像这样:
function postSalesOrder(workorders){
// workorders is an array of results of each workorder call
return $http.post("/api/salesorder", ...);
}
OFF-TOPIC:如果你可以控制你的服务器API,你应该考虑创建一个单独的API,并在最后作为一个事务发布所有的信息来创建零件、工作订单和销售订单。对每个订单都有一个API调用并不是一个好主意,当然,它不能保持事务的完整性(例如,/api/salesorder
可能失败,但您已经提交了以前的订单)
相关文章:
- Angular JS IE9 Hashbang url rewriting
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- angular.js没有'无法在PhoneGap中处理视图标记
- Angular js-返回一个包含类似
- 如何使用 Angular JS 将数据保存在数据库中
- 将Angular js与taglib结合使用
- Angular JS Filter-通过3个复选框进行筛选
- vaadin:使用自定义布局集成angular js
- angular js密码强度显示问题
- 使用angular.js问题的JavaSpringREST服务
- 将复杂对象从angular js传递到web api,它总是返回404
- entre上的angular js阻止提交
- 根据Angular.JS上一次的内容禁用选择
- 如何在angular js中使用指令.不适用于我的情况,为什么
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- 使用Angular js-量角器e2e测试上传文件
- Angular.js延迟控制器初始化
- 如何在angular.js中动态应用自定义过滤器
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记