2012-01-10 5 views
0

var idd;。各ループは完全に実行されません...なぜですか? (利用可能なコードとログ)

$.each(data, function (i, items) { //1st each 
    $.each(items, function (j, item) { // 2nd each 
     console.log("Field:" + j + " Value:" + item); 

     if (j=="sha_id"){ idd=item; } 

    }); 
    console.log("Items"); 
    console.log("ID:" + idd); 

    db.transaction(function (tx) { 
     console.log("being inserted"); 
     console.log("ID Inserting:" + idd); 
     //then some database insertion query 

これは基本的に第一.eachは2ラウンドと第二.eachを実行するサンプル上部のスクリプト

あるコンソールログに私が見ることを期待して、各第一.eachため

を2ラウンドを実行します
フィールド....値
フィールド.....値
アイテム
ID:2
は0123に挿入されます IDの挿入:2
フィールド....値
フィールド.....値
アイテム
ID:3
が挿入さ
IDの挿入:3

しかし、私は、この取得は

フィールド....値
フィールド.....値
のアイテム
ID:2
フィールド....値
フィールド.....値
アイテム
ID:
IDの挿入が挿入される3
:3

IDの挿入が挿入されます:3

なぜ私のdb.transactionは、最初は同じループ内にあるので、console.log( "Items")の直後には実行されません。私は正しいはずのコードエラーはありますか?

+0

データベーストランザクションコードは非同期呼び出しですか? –

+0

はいこれは非同期です:S http://dev.w3.org/html5/webdatabase/#dom-database-transaction – cjmling

答えて

0

おそらくdb.transactionは非同期です。

これは、$.eachループが実行を継続し、db.transactionが完了するまで待つことを意味します。

最後にdb.transactionが完了すると、指定したコールバックが呼び出されます。これは、$.eachループが終了した後に、長く(比較的)になります。

話の道徳は、db.transactionが完了するまで待つべきコードは、あなたが渡しているdb.transactionコールバック内で呼び出さなければならないということです。

+0

今すぐ理解しています.... btw私はこのコードを変更して呼び出すことができますそのdb.transactionからのダブルループ?またはそれ以上待つようにしてください:S – cjmling

+0

@cjmling:まあ、あなたは本当にそれを待たせたくありません。非同期コードの操作に慣れておくだけで済みます。待つ必要がある理由はありますか? –

+0

hehe、私は本当にそれを待つことを望んでいない:S ....実際には約20~50ループになるだろう..私はアンドロイドアプリを待つようにすべきではない:S ...彼らはr異なる関数を扱うのは簡単ですが、この二重ループで非同期コードがループしているので、私は難しいと思うようになります。S – cjmling

関連する問題