2017-04-11 1 views
0

Mein Ziel ist es, Datensätze in einer MongoDB-Sammlung in einer asynchronen foreach-Schleife zu speichern. Unten ist der Code, der für sich selbst spricht.Callback wird nicht aufgerufen, während collection.save() in der asynchronen foreach-Schleife im Knoten js verwendet wird

async.forEach(data, function(item, callback) { 
     var object = new Collection_Object(); 

     // errorLog.push(sdb); 
     object.save(function(error) { 
     count++; 
     console.log(count); 
     if(error) { 
      console.log("inside error"); 
      count--; 
     } 
     //callback(); 
     }); 
     callback(); 
    }, function() { 
    //This is the block which should be called after foreach. 
     res.json(data); 
    }); 

Nun, was passiert ist der Fluss überspringt den save Teil und direkt springt auf den Block, der nach forEach aufgerufen werden soll.

Wenn ich den save Teil kommentieren, funktioniert der Rückruf erwartungsgemäß ordnungsgemäß. Ich sehe nicht, wo ich Fehler mache. Kann collection.save() sein soll nicht so sein. Bitte führen.

+0

dup Frage sein könnte: http://stackoverflow.com/questions/10390041/node-js-using -the-async-lib-async-foreach-mit-objekt – funcoding

+2

Warum haben Sie den Aufruf von callback() in save() auskommentiert? Genau dort sollte es heißen. –

+0

Ich glaube, ich habe vergessen, die untenstehende callback() Funktion auskommentieren. Es funktionierte. Ich Idiot. –

Antwort

1

object.save() ist auch async, so dass Sie Callback-Funktion zu verwenden, haben mit der Methode speichern, wie:

object.save(function(error) { 
     count++; 
     console.log(count); 
     if(error) { 
      console.log("inside error"); 
      count--; 
     } 
     callback(); 
     }); 
+0

Es sollte innerhalb des Callbacks sein, das an 'save()' übergeben wird und nicht als separates Argument übergeben wird. – robertklep

+0

Oh, du hast Recht! – Alessandro

Verwandte Themen