2016-03-31 7 views
-2

Ich verwende node.js und mongoDB mit provents.js. Ich muss eine async Methode in der Versprechungsvariablen aufrufen, aber ich kann nicht eine andere als(). Weil es in der Schleife ist. der Code ist wie:Wie kann ich Async-Methode wie eine Synch-Methode aufrufen?

collection1.find({'key': 'value'}) 
      .then(function(matches){ 
       //loop starts 
       matches.forEach(function(match){ 
        var currentUser = collection2.find({"_id" : match._user}) 
        console.log(currentUser); //undefined 
       }) 
}) 

Wie Sie sehen können, ist currentUser eine undefinierte Variable. Wie kann ich das beheben?

+0

sollte ein Versprechen nicht current sein? –

+0

Auch, wäre es nicht besser, eine Liste von IDs zu sammeln, die Sie ziehen möchten, und alle auf einmal zu ziehen? –

+0

(das würde zufällig lösen Sie Ihr Problem und leistungsfähiger sein) –

Antwort

0

könnten Sie verwenden deep-populate

async auch funktionieren könnte:

function processMatch(match, cb) { 
    collection2.findOne({"_id":match._user}).then(function(user) { 
    cb(null, user); 
    }); 
} 
collection1.find({'key':'value'}) 
    .then(function(matches) { 
    var async = require('async'); 
    async.mapLimit(results.results, NUMBER_OF_PARALLEL_REQUEST, processMatch, function(err, users) { 
     users.forEach(function(currentUser) { 
     }); 
    }); 
    }); 
+1

Es ist üblich, negative Bewertungen mit Kommentaren zu begründen, damit die Antwort verbessert werden kann ... – malix

+0

seit wann ist es üblich, die Wahl zu begründen? Es ist üblich, Feedback über Kommentare zu geben, aber das hat nichts mit Abstimmung zu tun. –

+3

ersetzen "üblich" durch "vorteilhaft" oder "höflich" – dandavis

Verwandte Themen