1

データベーストランザクションを実行し、テキストボックスやボタンなどを作成するための配列要素を返すjsを作成したいため、起動時にデータベースからデータを取得するアプリを作成しています。elementArray=fetchdata();のようにオンロードで関数を呼び出すと、 そして、jsのdb.transactionはデータベースからデータをフェッチし、配列を返しますが、jsで関数を呼び出すと、関数を呼び出して実行を開始しますが、db.transactionが完了するのを待たず、さらに実行を開始します.I db.transaction が操作を完了するまで待機してから、さらに操作を実行します。データベースからデータを取得するために作成した dynamic_form.js ファイルは次のとおりです。

var elementArray=new Array();
function fetchdata(){
db.transaction(function(tx){
    tx.executeSql("Select * from contactTable",[],function(tx,results){
        for(var i=0;i<results.rows.length;i++){
            var element=new Object();
            element.Name=results.rows.item(i).name;
            element.Lastname=results.rows.item(i).last_name;
            element.Mobile=resulst.rows.item(i).mobile_no;
            // ****and so on***//
            elementArray[i]=element;
        }
        return elementArray;
    });
});}

jsファイルをロードするhtmlファイルのコードは次のとおりです。

function dbTranscation()
    {
        console.log("$ function");
        var elementArray=fetchdata();
                       // after this it sould call this function
          createfield();

    }
4

2 に答える 2

2
With callback:

var elementArray=new Array();
function fetchdata(callback){
db.transaction(function(tx){
    tx.executeSql("Select * from contactTable",[],function(tx,results){
        for(var i=0;i<results.rows.length;i++){
            var element=new Object();
            element.Name=results.rows.item(i).name;
            element.Lastname=results.rows.item(i).last_name;
            element.Mobile=resulst.rows.item(i).mobile_no;
            // ****and so on***//
            elementArray[i]=element;
        }
        callback(elementArray);
    });
});}

function dbTranscation()
{
        console.log("$ function");
        fetchdata(createfield);

}

// another function 
function createfield(elementArray)
{ 
   // some logic 
};
于 2013-08-12T06:08:35.600 に答える