4

このコードでは、外側の sqlite クエリが最初に作業を終了し、次に内側の sqlite クエリに進みます。なぜそれが起こるのかを説明し、私の要件の解決策も教えてください。

/*Outer Sqlite Query*/
 db.transaction(function(transaction){
 transaction.executeSql('SELECT * FROM OuterTable;', [], 
 function(transaction,results){
   if (results != null && results.rows != null) { 
     for (var i = 0; i < results.rows.length; i++) {
      /*My work is going here*/             

       /*Inner Sqlite Query   Inside lor loop*/
       db.transaction(function(transaction){        
   transaction.executeSql('SELECT * FROM MyInnerTable;',[],
   function(transaction, result){
   if (result != null && result.rows != null)  {                                   
         for (var j = 0; j < result.rows.length; j++) {
              /* My Work is Going here */
           }
            }
     },errorHandler);
     } ,errorHandler,nullHandler);
       /*Inner Sqlite End Here*/                 
                        }
                      }
                   },errorHandler);
                  }
                  ,errorHandler,nullHandler);
           /*Outer Sqlite End Here*/  

問題は、ここで
まず---> 外部 Sqlite 作業が実行され、次に内部 Sqlite 作業が実行されていることですが、私の要件は、外部 Sqlite の各値のように内部 Sqlite が機能することです

例えば: -

for(int i=0;i<=10;i++){
     for(int j=0;j<=10;j++){
   // here inner for loop will work for every value of outer for loop

   }
 } 

前もって感謝します

4

1 に答える 1

0

すべての外部クエリに対して内部クエリを実行するという要件は、このようには達成できません。SELECT クエリは非同期呼び出しであるためです。

外側の for ループでさえ、前のインデックスでのクエリが完了するのを待ちません。実行を継続し、同時に SELECT クエリを起動します。

ただし、それを実現するには、再帰を使用できます。

各外側のループが選択クエリを呼び出す場合、成功のコールバックは内側のクエリを実装し、内側のクエリの成功のコールバックは、必要なインデックスを使用して必要な回数だけ内部クエリを再帰的に呼び出し、回数をポストします (条件の内側のループ) ) インクリメントされたインデックスを使用して、外側のクエリ実装者を呼び出します。

それが役立つことを願っています。

于 2013-09-13T08:52:29.513 に答える