我有这个函数可以从我的数据库中获取一些数据,但是我在调用函数并获得正确的响应方面遇到了麻烦
function getEvents()
{
var x = [];
var l = dbCollection['e'].find({}).forEach(function(y) {
x.push(y);
});
return x;
});
和另一个调用此函数的函数但总是返回undefined。 如何让函数等到mongoose完成数组填充?
感谢您的帮助! My life
答案 0 :(得分:0)
dbCollection['e'].find
被称为非阻塞方式,因此您在填充前返回x
。你需要使用回调或一些mongoose承诺。您可以从数据库中获取所有返回值,如以下代码段
function getEvents(callback) {
dbCollection['e'].find({}, function(error, results) {
// results is array.
// if you need to filter results you can do it here
return callback(error, results);
})
}
每当您需要调用getEvents
函数时,您需要将回调传递给它。
getEvents(function(error, results) {
console.log(results); // you have results here
})
您应该阅读mongoose docs以了解查询的工作原理。
猫鼬的承诺也有支持。您可以查看this url以获取有关承诺的更多信息。
答案 1 :(得分:0)
@orhankutlu提出的解决方案应该可以正常工作。
我将使用promise提供另一种解决方案。您可以根据自己的编程风格在这两种解决方案中选择一种。
使用承诺的解决方案:
function getEvents() {
return new Promise(function(resolve, reject){
dbCollection['e'].find({}, function(error, results) {
if (error) return reject(error);
var x = [];
results.forEach(function(y){
x.push(y);
});
// forEach() is a blocking call,
// so the promise will be resolved only
// after the forEach completes
return resolve(x);
});
});
};
调用getEvents():
getEvents().then(function(result){
console.log(result); //should print 'x'
}).catch(function(err){
// Handle error here in case the promise is rejected
});
我会鼓励你尝试这两种方法,即使用回调和使用promises。希望你觉得它很有用!