zoukankan      html  css  js  c++  java
  • js处理异步问题

    场景一:循环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(){
        //处理后续问题
    })
  • 相关阅读:
    张艾迪(创始人):扫清头脑里的尘土继续向前
    张艾迪(创始人):世界最高级创始人
    张艾迪(创始人):发明整个世界+224C个国家
    张艾迪(创始人):发明Global.World.224C的天才
    张艾迪(创始人): 我出现在世界前的那些时光
    张艾迪(创始人):23岁.年少不喜欢浮华的我
    张艾迪(创始人):世界级天才女孩Eidyzhang
    张艾迪(创始人):23岁天才的创业史
    Python基础学习-8
    Python基础学习-7
  • 原文地址:https://www.cnblogs.com/ms-grf/p/8005308.html
Copyright © 2011-2022 走看看