Javascript Nodejs值没有推入数组

时间:2016-11-14 22:08:45

标签: javascript angularjs node.js

module.exports.findUser = function(query){
  var result = []; 
  User.find(query, function(err, data){
    result.push(data);
  });
  return result;
}

我尝试将数据数组推送到结果中,但继续得到一个空数组。

1 个答案:

答案 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));