0

html5 websql db テーブルが空かどうかを判断する関数を作成しようとしています。コードは以下です。何が起こっているかを確認するためにアラートをそこに入れました。この関数を実行すると、一番下のアラートが最初にポップアップします。テーブルは空ですが、戻り値は false です。

function tableisempty() {
tf = false;
query = "SELECT * FROM OLL;";

localDB.transaction(function(transaction){
         transaction.executeSql(query, [], function(tx, results){

             if (results.rows.length == 0) { 
                  tf = true;
                  alert ("table has "+results.rows.length+" rows. returning "+tf);
                 }   else    {
                  tf = false;    
                  alert ("table is not empty. returning "+tf); 
                 }                               
         }, errorHandler);              
});

alert ("return value is " + tf);

return tf;

}

4

1 に答える 1

0

あなたのコメントとw3 pageに基づいて、クエリは非同期で発生しています。問題の解決策は、js コードの構造に大きく依存します。

オプション1:

tf関数の外側に移動し (そしてvar前に a を追加し)、その直前の return と alert を完全に削除します。コールバックが呼び出されると、tf の値が変更され、残りのコードはそれを参照できますが、これは正常です。

オプション 2:

this SO question によると、同期操作を有効にするためにopenDatabase、呼び出し (コードの他の場所と思われる場所) を変更するだけでよい場合があります。openDatabaseSync

于 2011-10-04T21:32:29.853 に答える