module.exports.findUser = function(query){
var result = [];
User.find(query, function(err, data){
result.push(data);
});
return result;
}
我尝试将数据数组插入结果,但不断返回空数组。
最佳答案
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));
关于Javascript Nodejs 值未插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40598642/