Javascript MongoDB,Express-无法等待承诺,承诺{<;待定>;}
我现在能够接收数据,因为mongo正在向我回报承诺 这是我的数据Javascript MongoDB,Express-无法等待承诺,承诺{<;待定>;},javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我现在能够接收数据,因为mongo正在向我回报承诺 这是我的数据 { "_id" : ObjectId("59490a250f86a4b4e0cb75b2"), "title" : "a", "array" : [ { "_id" : ObjectId("59490a250f86a4b4e0cb75b3") } ] } { "_id" : ObjectId("59490a250f86a4b4e0cb75b3"), "title" : "b", "array" : [ { "_id" : Obje
{ "_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" }
这是我在MongoShell中的MongoDb查询
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);
});
但现在我想在serwer上执行此查询(因为我想从db接收数据)
所以我在控制器中重构到这个
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);
但是这条线
var foreignNode = db.collection('test3').findOne(foreignKey);
他在回报我
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
Promise{}
承诺{}
承诺{}
承诺{}
承诺{}
在我添加“.then”之后,我承诺我仍然收到承诺,但我对此无能为力。因此,我想问题是我使用forEach和map来接收承诺 这是我的解决方案:
db.collection('test3').find().toArray(async function (err, collection) {
async function insertNodes(document) {
var array = document.array;
if (array) {
for (let innerDoc of array) {
array[document.array.indexOf(innerDoc)] = await insertNodes(await db.collection('test3').findOne({_id: innerDoc._id}));
}
}
return document;
}
var fsdf = [];
for (let c of collection) {
fsdf.push(await insertNodes(c))
}
res.send(fsdf)
});
@4castle的可能重复我不认为这是相同的,因为我使用了“then”链接到了您遇到的问题的规范重复,但是第一个答案链接显示了您使用
then
如何产生与根本不使用承诺相同的结果。