1

だから、私は次のコードを持っています:

function sortVitalsByDate(tx, results){
vitals_counter = 0;
showLoader();
if(results.rows.length > 0){
    for (var i=0;i<results.rows.length;i++){
        vitals_counter += 1;
        var record_id = results.rows.item(i).id;
        readData('clinicalObservation', record_id, populateVitalsDateList);//calls readData function, uses populateVitalsDateList as the success callback (below)
        //hideVitalsLoader();
    }
    console.log("< === sqlHostingArray == "+ sqlHostingArray); //sqlHostingArray is blank
}else{
    $("#vitals-measures-content").html('<div class="no-info">No Information Entered</div>');
    hideVitalsLoader();
}
console.log(arguments.callee.name + ", # rows: " + results.rows.length);
}

function populateVitalsDateList(tx, results){
var listItems = ""; 
for (var i=0;i<results.rows.length;i++){
    var data_element = results.rows.item(i).data_element;
    var heading;
    var label;
    var listItem;
    var value;
    var bpsVal;

    switch(data_element){
    case 'clinicalObservationDate': 
        label = null;
        value = null;
        listItem = null;
        var dateObj = new Date(parseInt(results.rows.item(i).field_value,10));
        //console.log("< == dateObj is " + results.rows.item(i).field_value);
        //heading = formatDate(dateObj);
        // v1.1.1 CRM date sorage callback
        storeDateTemporarily(dateObj);

        heading = decrypt(results.rows.item(i).field_label);
        sqlHostingArray.push(heading);
        break;  
    case 'bloodPressureSystolic':   
        label = "Blood Pressure";
        value = decrypt(results.rows.item(i).field_value);
        bpsVal = value;
        break;   

    case 'bloodPressureDiastolic':
        label = "Blood Pressure";
        value = decrypt(results.rows.item(i).field_value);
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, bpsVal + "/" + value);
        }else{
            listItem = "";
        }
        break;

    case 'pulse':
        label = "Pulse";
        value = decrypt(results.rows.item(i).field_value);          
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, value + " bpm");
        }else{
            listItem = "";
        }           
        break;
    case 'respRateValue':
        label = "Respiratory Rate";
        value = decrypt(results.rows.item(i).field_value);
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, value + " bpm");
        }else{
            listItem = "";
        }
        break;
    case 'heightValue1':
        label = "Height";
        value = decrypt(results.rows.item(i).field_value);
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, value + " cm");
        }else{
            listItem = "";
        }
        break;
    case 'weightValue':
        label = "Weight";
        value = decrypt(results.rows.item(i).field_value);
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, value + " kg");
        }else{
            listItem = "";
        }
        break;
    case 'bmi':
        label = "BMI";
        value = decrypt(results.rows.item(i).field_value);
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, value);
        }else{
            listItem = "";
        } 
        break;
    case 'tempBody':
        label = "Temperature";
        value = decrypt(results.rows.item(i).field_value);
        if (value != "" && value != null && value != undefined){
            listItem = addDateLI(results.rows.item(i).record_id, label, value + " &deg;C");
        }else{
            listItem = "";
        } 
        break;
    default:
        label = null; 
        listItem = null;
        break;        

    }

    if (label != null && label != "" && label != undefined && listItem != null && listItem != "" && listItem != undefined){
        listItems += listItem;
    }
    //console.log(arguments.callee.name + ", label: " + label + ", listItem: " + listItem + ", data_element: " + data_element);
    vitals_counter -= 1;
    hideVitalsLoader();
}
}

これはすべて完全に正常に機能しますが、その行console.log("< === sqlHostingArray == " + sqlHostingArray);が、そのすぐ上の for ループが完了する前に console.log が呼び出されていることを示していることを除きます。つまり、プッシュされる変数は、sqlHostingArray後で実行する必要がありますが、使用する必要がある時点で定義されていません。変数がループ内で呼び出された場合は正常に機能しますが、ループが終了した後に実行する必要があります。誰かがそれを修正する方法を知っていますか?

編集

わかりましたので、非同期で実行します.... for ループの後に実行する必要がある部分を保持して、ループが終了するまで待機するにはどうすればよいですか。

4

0 に答える 0