2012-04-08 19 views
3

私はphonegapを使ってアンドロイドアプリケーションを作っています。私はデータベースを照会するためにphonegapのStorage APIを使用しています。ここに私のコードだ:コールバック関数が返るまで待つ方法は?

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); 
} 

問題は、私はdirectPathメソッドから戻る前に実行を終了querySuccessコールバックメソッドまで待ちたいです。

答えて

5

は非同期と戦うためにしようとしないでください:あなたのアプリは、ユーザーに応答しない見せかけ終わるかもしれません。後で実行する必要があるコードに対しては、querySuccessコールバックを使用します。あなたは待つ必要はありません

+0

私はdirectPath()を複数回、私は別のコードを実行するたびに呼んでいます。だから、どうすればこの問題を解決できますか? – coders1290

+0

あなたがdirectPathの三番目の引数として別の関数ポインタを与えることができる: クエリ – allesmi

+0

の成功コールバックはそれを得たとしてdirectPath(SRC、DEST、FUNC) とfuncが渡されます。ありがとう。 – coders1290

0

...ただ、その後、それを実行するためにquerySuccessでコードを書く....

3

私はあなたがこのようにそれを呼び出すことができ、同様の問題を解決するための関数を書いた:

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); 
     } 
} 
関連する問題