Ich bin wirklich verwirrt darüber, wie Versprechen und asynchrone Javascript funktionieren. Ich möchte einen GET on/user ausführen und mongo abfragen, so dass das Ergebnis der ersten Abfrage in irgendeiner Weise verarbeitet wird, um die Abfrage der zweiten Abfrage zu bilden, und das Ergebnis dieser Abfrage die Abfrage der dritten Abfrage sein wird.Wie verwenden Sie Versprechen/Rückrufe mit Expressjs und Mongodb?
Grundsätzlich möchte ich das Ergebnis des letzten Mongo-Ergebnisses über res.send (result) an den Client zurücksenden.
Was ist der richtige Weg, dies zu tun, damit der Client eine 200 OK zurück mit dem Ergebnis der dritten verschachtelten Mongo-Abfrage bekommt?
app.get('/user', function (req, res, next) {
var query = {"isRegistered": false }
db.collection('users', function (err, collection) {
collection.find(query).toArray(function (err, result) {
if (err) {
console.log(err)
}
else {
if (result.length > 0) {
// do some random processing
var randomUser = result[Math.floor(Math.random() * result.length)]
// do ANOTHER db query
query = {"age": randomUser.age}
collection.find(query).toArray(function (err,result) {
if (err) {
console.log(err)
}
else {
// do some other logic ...
query = {something}
collection.find(query).toArray(function (err,result) {
if (err) {
console.log(err);
}
else {
// FINALLY RETURN THIS RESULT
res.send(result);
next()
}
})
}
})
}
}
});
});
Fügen Sie einfach einen res.status (200) für den gewünschten 200-Statuscode hinzu. – JonLuca
@ JonLuca - Das würde erfordern, dass ich einige Funktionen und Sachen hinzufügen, aber okay ... – adeneo
@adeneo Danke! Ich habe eine weitere Follow-up-Frage dazu, wenn Sie bitte einen Blick darauf werfen können: https://stackoverflow.com/questions/45123212/nodejs-how-do-i-condictive-restart-the-promise-chain-from-the -Anfang – noobprogrammer