2016-05-11 11 views
0

Pouchdbのdb.queryに関する問題があります。 forループを照会したいしかし、私のforループブロックが終了すると、私のクエリコードが(db.query)の実行を開始します。 マイコード:Pouchdb forループでどのようにクエリできますか?

var db = new PouchDB('http://127.0.0.1:5984/parameterResult'); 
     var parameterArr=['101','102','103']; 
for (var x=0;data.length-1;x++){ //1. for loop 
     db.query('test/newView',{include_docs:true , startkey: [  "1001",  data[x],  "2016-05-05" ], 
     endkey: [  "1001",  data[x],  "2016-05-05"+"\u9999" ] }).then(function (result) { 
     // debugger; 
      for (var i=0;i<result.rows.length;i++) { 
       data.push(result.rows[i].value[0]); 
      } 
     }); 
} 

を締結する:私のコードでは、私の最初のループライン仕上げ、私のdb.query()が開始したとき。おかげさまで

答えて

1

各クエリの応答は、約束を返すようです。すべての結果セットで同じことをやっているので、Promise.allを使用するとどうなりますか? docsから

サンプル:

Promise.all([p1, p2, p3]).then(function(values) { 
    console.log(values); // [3, 1337, "foo"] 
}); 

だからあなたのケースでは、(この

var promises = []; 

for (var x=0;data.length-1;x++){ 

promises.push(db.query('test/newView',{include_docs:true , startkey: [  "1001",  data[x],  "2016-05-05" ], 
     endkey: [  "1001",  data[x],  "2016-05-05"+"\u9999" ] })) 

} 

Promises.all(promises).then(function(values){ 
//Do stuff 
}); 
+0

Promise.allような何かを)は確かにここに正しい答えです。 :)あなたは[私たちは約束に問題があります](http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html)を読むことをお勧めします。特にセクション「forEach()に約束をどのように使うのですか? PouchDBのAPIが約束を返すので、おそらく 'Promise.all()'を使いたいと思うでしょう。 – nlawson

関連する問題