2017-01-26 17 views
0

2つの異なる質問を実行し、同じejsページに結果を表示しようとしています。私は多くを検索し、最後に非同期メソッドを見つけました。私はこれをどのように試したのですか?ノードjsの非同期が機能していません

JS

router.get('/CreateSurvey', function(req, res, next) { 

async.parallel([ 
     function(callback) { 
      QBank.find(function (err, classes, count){ 
       classes : classes 
      }); 
     }, 
     function(callback) { 
      QBank.findOne({_id:"H001"}, function (err, questions, count){  
       questions : questions 
      }); 
     } 
    ], function(err) { 
     if (err) return next(err); 
     res.render('CreateSurvey', QBank); 
    }); 
ファイル

})。

しかし、 '/ CreateSurvey'ページをリフレッシュするとレンダリングされません。私はすでに非同期モジュールをダウンロードし、jsファイルに必要です。 どこが間違っていますか?

+0

I)は、(私はあなたがres.renderにそれを渡している、なぜ問題がQBank中と思われるものASYNC.PARALLELに間違った何かを見つけていませんか? –

+0

私は他の人たちの仕事に従事していました。 「クラス」と「質問」の両方が同じ名前の「QBank」に割り当てられると思います。最終回答はhttp://stackoverflow.com/questions/26402781/nodejs-mongoose-render-two-models-from-collections –

答えて

1

まず、とquestions : questionsのコードは何ですか?あなたは何をしようとしているのですか?各task関数(配列で機能)の

callbackパラメータは、成功又はエラーと各タスクの完了を示すために、タスク内で呼び出さなければなりません。

tasksが完了した後にのみ、実際のレンダリングを行っている任意のメインcallback(コード内の3番目の機能)が呼び出されます。

callbackのコードでは、taskの内部では呼び出されません。その結果、最終的にコールバックが呼び出されることはありません。実際、あなたのコードでは、最初の*タスクだけが実行され、それ以降は何も起こりません。

読むよりおよそasync.paralleldocumentation

+0

私のアンケートシステムには質問銀行があります。ユーザーが「質問をインポート」に行くと、質問タイプ(クラス)を表示したいと思います。ユーザーがタイプをクリックすると、そのタイプの質問が表示されます。だから、これをjavascriptで表示するには、同じejsページでhideと表示してください。私はすべてを見つけて、同じejsページに1つを見つけます。 –

+0

'mongoose'の' .find() 'に使用している構文は何ですか? 1回の呼び出しでデータベース内のすべての質問を読んでいますか?あなたはそれをしたいですか? –

+0

また、コードの構文を正しく取得する必要があります。 @ MukeshSharmaの返事をご覧ください。最初に 'mongoose'と' async'の関連文書を読むことをお勧めします。 –

1

のコードを持ついくつかの問題がありますが、あなたはasyncコールに対応するcallbackを呼び出していません。次のことを試してみてください。

router.get('/CreateSurvey', function(req, res, next) { 
    async.parallel({ 
    classes: function(callback) { 
     QBank.find(function(err, classes, count){ 
     callback(classes); 
     }); 
    }, 
    questions: function(callback) { 
     QBank.findOne({_id:"H001"}, function (err, questions, count){  
     callback(questions); 
     }); 
    } 
    }, function(err, result) { 
    if (err) return next(err); 
    res.render('CreateSurvey', result); // { classes : [c1, c2] , questions : [q1, q2] } 
    }); 
}); 
関連する問題