Ich bin jetzt in der Lage, Daten zu empfangen, weil Mongo Rückkehr Versprechen mir istMongoDB, Express - Cant für Versprechen warten, Versprechen {<pending>}
Diese
meine Daten{ "_id" : ObjectId("59490a250f86a4b4e0cb75b2"), "title" : "a", "array" : [ { "_id" : ObjectId("59490a250f86a4b4e0cb75b3") } ] }
{ "_id" : ObjectId("59490a250f86a4b4e0cb75b3"), "title" : "b", "array" : [ { "_id" : ObjectId("59490a250f86a4b4e0cb75b4") } ] }
{ "_id" : ObjectId("59490a250f86a4b4e0cb75b4"), "title" : "c", "array" : [ { "_id" : ObjectId("59490a250f86a4b4e0cb75b5") }, { "_id" : ObjectId("59490a250f86a4b4e0cb75b6") } ] }
{ "_id" : ObjectId("59490a250f86a4b4e0cb75b5"), "title" : "d" }
{ "_id" : ObjectId("59490a250f86a4b4e0cb75b6"), "title" : "e", "array" : [ { "_id" : ObjectId("59490a250f86a4b4e0cb75b7") } ] }
{ "_id" : ObjectId("59490a250f86a4b4e0cb75b7"), "title" : "f" }
Und das ist mein MongoDB Abfrage in Mongo Shell
function insertNodes(document) {
var array = document.array;
if (array) {
array.forEach((innerDoc) => {
let foreignKey = {_id: innerDoc._id};
let foreignNode = db.test3.findOne(foreignKey);
array[array.indexOf(innerDoc)] = insertNodes(foreignNode);
});
}
return document;
}
var documents = db.test3.find();
documents.forEach((document) => {
document = insertNodes(document);
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printjson(document);
});
aber jetzt möchte ich gerne diese Abfrage auf serwer tun (weil ich möchte Daten von db erhalten)
in-Controllerso dazu ich
function insertNodes(document) {
var array = document.array;
if (array) {
array.forEach((innerDoc) => {
var foreignKey = {_id: innerDoc._id};
var foreignNode = db.collection('test3').findOne(foreignKey);
foreignNode.then(function (data) {
console.log(data);
foreignNode = data;
});
console.log(foreignNode);
array[array.indexOf(innerDoc)] = insertNodes(foreignNode);
});
}
return document;
}
var documents = db.collection('test3').find();
var docs = [];
documents.forEach((document) => {
docs.push(insertNodes(document));
});
res.send(docs);
aber diese Linie
var foreignNode = db.collection('test3').findOne(foreignKey);
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
, nachdem ich ".then"
ist Returnning mich Refactoring füge ich noch versprechen erhalten Versprochen, aber ich kann nichts damit machen.
Mögliche Duplikat [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Https://stackoverflow.com/questions/14220321/how-do-i-return-the-respo nse-from-an-asynchron-call) – 4castle
@ 4castle Ich denke nicht, dass dies das gleiche ist, weil ich "dann" –
Ich bin mit dem kanonischen Duplikat für das Problem, das Sie erleben, verknüpft, aber die erste Antwort verweist auf [diese Frage ] (https://stackoverflow.com/q/23667086/5743988), die zeigt, wie Sie Ihre Nutzung von 'then' Ergebnissen in dem gleichen Ergebnis wie keine Versprechungen überhaupt verwendet wird. – 4castle