Node.js 将mongoose结果返回给变量
我知道这是一个基本问题,但我想不出来。我尝试了一些异步函数回调的方法,但没有解决我的问题。这是我的代码Node.js 将mongoose结果返回给变量,node.js,mongodb,mongoose,nosql,Node.js,Mongodb,Mongoose,Nosql,我知道这是一个基本问题,但我想不出来。我尝试了一些异步函数回调的方法,但没有解决我的问题。这是我的代码 Collection1.find({archived:false}).exec().then(obj => { obj = _.groupBy(obj,'department'); Object.keys(obj).forEach(function(key) { const object_collection =[]; function retrieveUser(callb
Collection1.find({archived:false}).exec().then(obj => {
obj = _.groupBy(obj,'department');
Object.keys(obj).forEach(function(key) {
const object_collection =[];
function retrieveUser(callback) {
for(let i = 0;i obj[key].length; i++){
French.find(function(err, users) {
if (err) {
callback(err, null);
} else {
callback(null, users[0]);
}
});
};
};
retrieveUser(function(err, user) {
object_collection.push(user);
});
// i need object_collection here after for loop has done
console.log(object_collection);
});
})
这就是我可以利用提供的细节所做的 如果您使用的是Node.js v7.6或更高版本,那么您可以利用
async/await
用法,并按照如下方式进行重构
async function yourFunctionName(req, res) {
const obj = await Collection1.find({archived:false}).exec();
obj = _.groupBy(obj, 'department');
Object.keys(obj).forEach(key => {
const object_collection = [];
const frenchPromises = [];
for (let i= 0; i <= obj[key].length; i ++) {
// This will create an array of promises that will be resolved later.
frenchPromises.push(
// This will do the same as your callback, but returning a promise.
French.find().exec().then(users => users[0])
);
}
// When awaiting a Promise.all we will get an array containing the results
// of all the promises insde the frenchPromises array.
// Meaning, that we will get back the array of users from the previous code.
object_collection = await Promise.all(frenchPromises);
console.log(object_collection)
});
}
希望这能有所帮助。感谢您在这方面的努力。我已经用类似的方法解决了我的问题。我在“foreach”之后只为“for循环”分配了“async function”,并将返回值推送到数组。但我会记住这一点!
const obj = Collection1.find({ archived: false })
.exec()
.then(obj => {
obj = _.groupBy(obj, 'department');
const frenchPromises = [];
Object.keys(obj).forEach(key => {
for (let i = 0; i <= obj[key].length; i++) {
// This will create an array of promises that will be resolved later.
frenchPromises.push(
// This will do the same as your callback, but returning a promise.
French.find().exec().then(users => users[0])
);
}
});
// Returns an array of promises that will be resolved in the next .then() call
return Promise.all(frenchPromises);
}) // This will return the array of users
.then(object_collection => {
console.log(object_collection);
});