User.find() 是异步的,因此您不能立即返回值。你有两种选择来解决这个问题:
选项 1:
接受一个回调参数并在结果准备好时调用它:
module.exports.findUser = function(query, cb) {
var result = [];
User.find(query, function(err, data){
result.push(data);
cb(err, result);
});
}
常见的 Node.js 约定是具有第一个参数 err 的回调,这将返回任何错误,第二个参数是您返回的实际数据。
这将被用作:
findUser('query', function (err, data) {
if (err) throw new Error(err);
console.log(data);
});
选项 2:
返回一个Promise,然后可以链接。这不是非常常见的 Node.js 约定(选项 1 是),但它正变得越来越普遍,并且可能在一两年内成为常态:
module.exports.findUser = function(query) {
return new Promise(function(resolve, reject) {
var result = [];
User.find(query, function(err, data){
err && reject(err) || result.push(data) && resolve(result);
});
}
}
这样使用:
findUser('query').then(result => console.log(result)).catch(err => throw new Error(err));