场景一:循环list中的数据,每个数据都要用ajax查询数据库并赋值
第一种处理方式
function getDrugPrescAttr(ordersDrugWestListPresc, index, callback){ var doctorOrders = ordersDrugWestListPresc[index]; var successCallback = function (data) { doctorOrders.prescAttr = getDrugPrescAttrDetail(data.toxiCode); if (index < ordersDrugWestListPresc.length - 1) { getDrugPrescAttr(ordersDrugWestListPresc, ++index, callback); } else { callback(); } }; HrUtils.httpRequest($http, Path.getUri("api/inp-orders/get-drug-prescAttr?drugCode=" + doctorOrders.drugOrderDetail.drugCode), successCallback, null, hrDialog, HrUtils.httpMethod.POST, null); }
使用方法 :
getDrugPrescAttr(ordersDrugWestListPresc, 0, function(){ //查询后处理后续流程 })
第二种处理方式(1)
function getDrugPrescAttr(ordersDrugWestListPresc, callback){ var asyncInfo = {total: 0, count: 0}; if(ordersDrugWestListPresc !==null && ordersDrugWestListPresc.length > 0){ for(var i=0; i<ordersDrugWestListPresc.length; i++){ asyncInfo.total ++; var doctorOrders = ordersDrugWestListPresc[i]; var successCallback = function (data) { asyncInfo.count ++; doctorOrders.prescAttr = getDrugPrescAttrDetail(data.toxiCode); if(asyncInfo.count === asyncInfo.total){ callback(); } }; HrUtils.httpRequest($http, Path.getUri("api/inp-orders/get-drug-prescAttr?drugCode=" + doctorOrders.drugOrderDetail.drugCode), successCallback, null, hrDialog, HrUtils.httpMethod.POST, null); } } if(asyncInfo.count === asyncInfo.total){ callback(); } }
第二种处理方式(2)
function getDrugDictForPresc(doctorOrders, callback){ var successCallback = function (data) { doctorOrders.prescAttr = getDrugPrescAttrDetail(data.toxiCode); callback(); }; HrUtils.httpRequest($http, Path.getUri("api/inp-orders/get-drug-prescAttr?drugCode=" + doctorOrders.drugOrderDetail.drugCode), successCallback, null, hrDialog, HrUtils.httpMethod.POST, null); } //获取药品属性 function getDrugPrescAttr(ordersDrugWestListPresc, callback){ var asyncInfo = {total: 0, count: 0}; if(ordersDrugWestListPresc !==null && ordersDrugWestListPresc.length > 0){ for(var i=0; i<ordersDrugWestListPresc.length; i++){ asyncInfo.total ++; var doctorOrders = ordersDrugWestListPresc[i]; getDrugDictForPresc(doctorOrders, function(){//查询数据库(ajax) asyncInfo.count ++; if(asyncInfo.count == asyncInfo.total){ callback(); } }) } } if(asyncInfo.count === asyncInfo.total){ callback(); } }
使用方法
getDrugPrescAttr(ordersDrugWestListPresc, function(){ //处理后续问题 })