2016-04-24 6 views
0

この問題は完全に悩んでいます。私は長い間メモリに格納されたクエリ配列を持っています。それを使って、私はAPIを呼び出し、リクエストを発し、結果をMongoDBに保存します...問題ありません。残念ながら、私はコントロールregがありません。 APIサーバーといくつかのEconnet/TCP/IP接続エラーが原因で私のアプリケーションがクラッシュすることがあります。mongooseとノードを使用したクエリのタイミング

私のクエリタスクを再開できるように、私は自分のすべてのクエリを自分のMonogDBに書きました。実行中の各クエリのqueryStateを追跡/記録したいと思います。

私の問題は、Mongoから要求を発生させるメソッドにクエリを戻そうとするときに発生します。何らかのタイミング/非同期の問題(私は推測)に、私のqueryArrayはすべての時間を未定義たまま、私はそれは...

server.jsは解決されません:すべての未定義

//TEST 
var querymongo = require('./config/queryMongo'); 
var queryobject = new querymongo; 
var queryArray = queryobject.results(); 

queryArrayがままに時間...

queryMongo.js:

//require mongo model + db connection 
    var queryDB = require('./queryDB'); 

    //constructor 
    ... 

    //mongoRequest method 
     this.mongoRequest = function(){ 
      console.log("Function mongoRequest called now!"); 
      return new Promise(function(resolve, reject){ 
       queryDB.queries.find({'SearchIndex': 'All'}, function(err, doc){ 
        if(err) return reject (err) 
        else resolve (doc) 
       }); 
      }); 
     } 

    //resolve results 
    this.results = function(){ 
     var queryArray = []; 
     this.mongoRequest().then(function(doc, err){ 
      console.log(doc) 
      queryArray = doc; 
      return queryArray; 
     }).catch(function(err){ 
      console.log(err) 
      }); 
     } 



} 
module.exports = QueryMongo; 

にconsole.log(DOC)メソッドは動作しますが、ですべてのドキュメントを返す結果で実行されているすべてのコードの終わり。ここでの問題は何ですか?

これは私が狂ったように私は非常に感謝しています!

おかげ

Hucho

+0

「結果」関数で約束を返すか、コールバックを返すべきだと思います。あなたの 'QueryMongo'は非同期なので、それを同期関数として使うべきではありません –

+0

これはまさに質問です。私はコードでステップバイステップでデバッグし、問題は私の結果関数respの "then"です。コールバックそれは再び非同期...別の約束を実行している? – Hucho

答えて

0

queryArrayが定義されていない理由をだからあなたの質問はありますか?

Mongoのクエリは非同期で、結果を得る前にconsole.logを直後に実行しているためです。

+0

あなたの答えに感謝しますが、私はこれを正確にやっています... – Hucho

+0

私は最後にそれを自分で解決しました。それは素晴らしい作品です...もし誰かが興味があれば、コードを投稿できます... – Hucho

関連する問題