2012-04-08 4 views
3

Ich mache eine Android-Anwendung mit Phonegap. Ich benutze Phonegap Storage API für die Abfrage einer Datenbank. hier ist mein Code:Warten bis die Rückruffunktion zurückkehrt?

function directPath(src, dest) 
{ 
    var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000); 
    db.transaction(queryDB, errorCB); 
    return arrayroute; 
} 

function queryDB(tx) 
{ 
    tx.executeSql(query, [], querySuccess, errorCB); 
} 

function querySuccess(tx,results) { 
    //Write some code here. 
} 

function errorCB(err) { 
    alert("Error in SQL: " + err); 
} 

Das Problem ist, ich, bis die Callback-Methode warten wollen querySuccess die Ausführung beendet, bevor sie aus dem DirectPath Methode zurück.

Antwort

5

Versuchen Sie nicht, die Asynchronität zu bekämpfen: Ihre App reagiert möglicherweise nicht mehr auf den Benutzer. Verwenden Sie den querySuccess-Rückruf für jeden Code, der anschließend ausgeführt werden muss.

+0

Ich rufe directPath() mehrmals und jedes Mal, wenn ich anderen Code ausführen möchte. Also, wie löse ich dieses Problem? – coders1290

+0

Sie könnten einen anderen Funktionszeiger als dritten Parameter für den direkten Pfad angeben: directPath (src, dest, func) und func wird als der erfolgreiche Rückruf Ihrer Abfrage übergeben – allesmi

+0

hat es. Vielen Dank. – coders1290

0

Sie müssen den Code in querySuccess nicht warten ... Schreiben Sie einfach es danach auszuführen ....

3

ich eine Funktion hat ein ähnliches Problem zu lösen, können Sie es so nennen:

database("SELECT * FROM USER", function(result){ 
    console.log(result); 
}); 

//FUNCTION 
function database(sql, callback) { 

    if(!callback) { callback = function(r) { console.log(r); } } 

    var database_name = "Database", 
     database_version = "1.0", 
     database_displayname = "DatabaseName", 
     database_size = 1000000, 
     result = { 
      error: -1, 
      message: "", 
      len: 0, 
      rows: {} 
     }, 
     db = window.openDatabase(database_name, database_version, database_displayname, database_size); 
     db.transaction(
         function (tx) { 
          tx.executeSql(sql, [], querySuccess, errorCB); 
         }, function (tx, results) { 
          //SUCCESS 
         }, function (err) { 
          //ERROR 
         } 
     ); 
     function querySuccess(tx, results) { 
      if (results) { 
       result.len = results.rows.length; 
       result.message = "Success"; 
       for (var i=0; i<result.len; i++){ 
        result.rows[i] = results.rows.item(i); 
       } 
      } else { 
       result.len = 0; 
      } 
      callback(result); 
     } 
     function errorCB(err) { 
      result.error = err.code; 
      result.message = err.message; 
      callback(result); 
     } 
}