module.exports.findUser = function(query){
var result = [];
User.find(query, function(err, data){
result.push(data);
});
return result;
}
我尝试将数据数组推送到结果中,但继续得到一个空数组。
答案 0 :(得分:3)
User.find()
是异步的,因此您不能立即返回该值。您有两种方法可以解决此问题:
选项1:
接受回调参数并在结果准备就绪时调用它:
module.exports.findUser = function(query, cb) {
var result = [];
User.find(query, function(err, data){
result.push(data);
cb(err, result);
});
}
Common 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));