2017-07-18 5 views
0

Ich bin neu in Nodejs für Schleife nicht synchron funktioniert. Bitte helfen Vielen Dank im VorausSchleife funktioniert nicht richtig in Knoten js

hier ist mein Code

notifyRide:function*(body){ 
    yield User.find({_id: {$ne: body.userId}},function(err, doc){ 
    if(doc != null){ 
    User.findOne({_id:body.userId},function(err, user){ 
    Ride.findOne({_id : body.rideid},function*(err1,ride){ 
     for (var i = 0; i < doc.length; i++) { 
     console.log(i)// getting 0 
     yield rideStatus.findOne({$and:[{receiver_id:doc[i]._id},{ride_id:body.rideid}]}, function(err, response) 
     { 
     console.log(i);//getting 1 
     }) 
     } 
    }) 
    }) 
    } 
}) 

}

+0

Did [meine Antwort] (https://stackoverflow.com/questions/45170956/loop-not-working- richtig-in-node-js/45171189 # 45171189) unten helfen Ihnen? Irgendwelche Kommentare? – rsp

Antwort

2

Da Sie scheinen Generator-basierte Koroutinen zu verwenden, warum nicht Sie die Versprechen verwenden, die von Mongoose Methoden zurückgegeben werden ? Siehe:

Zum Beispiel statt:

Ride.findOne({_id : body.rideid}, function*(err1,ride) ... 

Sie verwenden können:

let ride = yield Ride.findOne({_id : body.rideid}); 

und die verschachtelten Funktionen vermeiden. Sonst liefern Sie Dinge nicht vom richtigen Generator und die erhaltenen Werte werden ignoriert.

Auch sicherstellen, dass, wenn Sie Generator-basierte Coroutinen verwenden möchten, als Sie Ihre Generatorfunktionen ordnungsgemäß umwickeln müssen. Zum Beispiel:

notifyRide:function*(body) { 
    // ... 
} 

sollte dies wahrscheinlich sein mit co:

notifyRide: co.wrap(function* (body) { 
    // ... 
}) 

oder diese mit Drossel:

notifyRide: P.coroutine(function* (body) { 
    // ... 
}) 

Alternativ können Sie verwenden async und await

notifyRide: async (body) => { 
    // ... 
    // use 'await' instead of 'yield' 
} 

Beachten Sie, dass die Korotinen selbst immer Versprechen abgeben.

Und für die Liebe Gottes, verwenden Sie eine Einrückung. Ich nach einem anständigen Stil guilde wie die stark von Airbnb empfehlen:

Verwandte Themen