我正在创建一个应用程序,它在启动时从数据库中获取数据,我想创建一个js,它将执行数据库事务并返回数组元素,我将通过它创建文本框和按钮等.Know问题是当我在onload上调用函数时,如 elementArray = fetchdata(); ,然后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;
});
});}
这是html文件中加载js文件的代码:
function dbTranscation()
{
console.log("$ function");
var elementArray=fetchdata();
// after this it sould call this function
createfield();
}
答案 0 :(得分:1)
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
};
答案 1 :(得分:0)
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