2017-10-29 2 views
0

Ich habe eine Funktion, die drei mongooose Befehle ausführt. 1. Findet eine Liste aller Partner. 2. Findet eine Liste aller Benutzer. 3. Aktualisieren Sie die Benutzertabelle.Die Mungo-Abfragen in Serie synchron machen

Problem: Mongoose tut es asynchron und es führt andere Befehle aus. Wie mache ich es in Serie 1,2,3 ausführen und dann andere Befehle ausführen. Unten habe ich ein Code-Snippet angehängt.

Das Problem damit ist, dass es die drei Mungo-Befehle aynchron ausführt und redirect() aufruft.

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

Lesen Sie, wie Rückrufe zu verwenden. Oder sogar Versprechen. Mungo unterstützt das auch. https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/ – Roshan

+0

Verwenden Sie async.waterfall ([fn1, fn2, ...], cb): https: // www .npmjs.com/package/async-waterfall –

Antwort

0

Sie sollten die Aufrufe in Rückrufe verschachteln.

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

     }) 
    }) 
}) 

Wenn Sie nisten Rückrufe vermeiden wollen, verwenden Sie die Versprechen Schnittstellen von Mongo-Client oder Mungo

+0

Oh bitte nein. Nicht das fliegende V! –

+0

@NeilLunn Auch ich würde Callbacks verschachteln. Die Lösung wird stattdessen Promises verwenden. –

+0

Dann poste solche Schlacke nicht, wenn du es nicht selbst machst. Es gibt keine Notwendigkeit, wenn es eine [ausgezeichnete Quelle] (https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) gibt, um zurückgebende und passierende Werte zu erklären mit den verschiedenen verfügbaren Methoden. Sicherlich hilfreicher als "Nest Callbacks" glaubst du nicht? (Rhetorische Frage - also antworte nicht, denke nur). –