2012-02-26 10 views
-1

これは簡単なことではないようですが、複雑なものではないはずですが、2日後に私は知恵の終わりです。なぜこのループが2回実行されるのか分かりません。ここでループが2回実行される理由を特定できません

db = openDatabase("com.xyz.mobile.db", "", "The App Database", 5 * 1024 * 1024); 

     db.transaction(function(tx) { 
      tx.executeSql("SELECT * FROM somedata", [], function(tx, result) { 
       c = (result.rows.length - 1); //result.rows.length = 2 there are only 2 records 
       console.log("c = " + c); // outputs 1 in console 
       for(var i = 0; i < result.rows.length; i++) { 
        console.log("i = " + i); 
        console.log(result.rows.item(i)['description']); 
        if(i == c){ 
         console.log("I will run twice just to make you pound on key board"); 
         break; 
        } 
       } 
      }, null); 
     }); 

は、私はクロームコンソールで得るものです:

c = 1 
i = 0 
2/30/2012 22:02:08 
i = 1 
2/30/2012 22:02:27 
I will run twice just to make you pound on key board 
c = 1 
i = 0 
2/30/2012 22:02:08 
i = 1 
2/30/2012 22:02:27 
I will run twice just to make you pound on key board 

ヘルプ私オビワンあなたの私の唯一の希望。

+0

このコードはどのように呼び出されますか? – nnnnnn

+3

あなたは本当に "なぜループが2回走るのか"と尋ねることはありません。実際に知りたいのは、*コールバック*が2回実行される理由です。右? –

+0

すべてのループで 'if(i == c)'をチェックしています。パフォーマンスのために、私は 'i ajax333221

答えて

0

c = 1のでresult.rows.length = 2のでfor(var i = 0; i < result.rows.length; i++)実行2Xは、私はあなたが意味を考える:for(var i = 0; i < c; i++)

コールバックが二回実行し、なぜあなたは

...私はそれが二回呼び出されていると結論付けたと思われる場合には、求めていた場合を除き

と私はどうなる:

db = openDatabase("com.xyz.mobile.db", "", "The App Database", 5 * 1024 * 1024); 
console.log('i am here at ' + new Date()); 
db.transaction(function(tx) { 
.... 
+1

私は同じことを考えました。タイトルはあまり語られていません。 OPはなぜループが2回反復するのか尋ねるのではなく、なぜコールバックが2回実行されるのかを尋ねているので、ループ内で 'if()'が2回実行されるようになります。 –

+0

@amnotiam derp!編集された笑 – ckozl

0

は、スクリプトが

であることを確認します

セクションないで

<body> </body> 

、すべての物事は罰金になります。私の同僚は同じ問題を抱えていましたが、これが解決策でした。私たちはまだそれが2回実行する理由は適切な答えを持っていないが、行くと私はそれが助けて知らせてください。

関連する問題