1

我正在创建一个应用程序,它在启动时从数据库中获取数据,因为我想创建一个 js,它将执行数据库事务并返回数组元素,通过它我将创建文本框和按钮等。知道问题是当我像elementArray=fetchdata();这样调用 onload 上的函数时 然后js中的db.transaction将从数据库中获取数据并返回和数组但是当我在js中调用函数时它调用函数并开始执行但不等待db.transaction完成并开始进一步执行。我想等到 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 回答
1
var elementArray=new Array();
function fetchdata(callbackFN){
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;
        }
        callbackFN();
    });
});}

// you can call function with call back

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

// you can define "fetchdata" function in globally and can access from any other pages
于 2013-08-12T07:02:39.107 回答