2017-10-29 11 views
0

私は3つのmongoooseコマンドを実行する関数を持っています。 1.すべてのパートナーのリストを検索します。 2.すべてのユーザーのリストを検索します。 3.ユーザーテーブルを更新します。mongooseクエリを同期的に連続して実行する

問題:Mongooseは非同期で実行し、他のコマンドを実行します。どのようにしてそれをシリーズ1,2,3で実行させ、他のコマンドを実行するのですか?以下、コードスニペットを添付しました。

この問題は、3つのmongooseコマンドを非同期に実行し、redirect()を呼び出していることが原因です。あなたが巣のコールバックのコールすべき

router.post('/login', function(req, res, next) { 
    Partner.findOne({'groupName': req.session.user.groupnName}), function(error, data) { 
    var partnerInfo = data; 
    if(partnerInfo && req.session.user) { 
     req.session.user.accountID = partnerInfo.accountID; 
     req.session.user.iamRole = partnerInfo.iamRole; 
    } 
    }; 
var id; 
User.find({'username': req.session.user.username}, function(err, data) { 
    if(data) { 
     id = data._id; 
    } 
    }); 

User.findByIdAndUpdate(id, req.session.user, function(error) {}); 
return res.redirect('/home'); 
}); 
+0

をマングースします。あるいは約束します。モンゴースもそれをサポートしています。 https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/ – Roshan

+0

async.waterfall([fn1、fn2、...]、cb)を使用:https:// www .npmjs.com/package/async-waterfall –

答えて

0

func1(args, function(){ 
    // do something here 
    func2(someMoreArgs, function(){ 
     // do something more here 
     func3(andMore, function(){ 

     }) 
    }) 
}) 

あなたは、入れ子のコールバックを避けるためのmongo-クライアントの約束インタフェースを使用するか、コールバックを使用する方法についての記事を読むまで

+0

ああ、しないでください。飛行機ではないV! –

+0

@NeilLunnでも、私はコールバックのネストを避けるでしょう。解決策は代わりに約束を使用することです。 –

+0

あなたがそれを自分でやっていないなら、そのようなドロスを掲示しないでください。戻り値と渡し値を説明するための[優れたリソース](https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call)が必要な場合はありません。さまざまな方法を利用できます。確かに "ネストコールバック"はあなたが考えていないより便利な? (修辞的な質問 - それでは答えないで、考えてください)。 –

関連する問題