Javascript节点值未推入数组

Javascript节点值未推入数组,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,我尝试将数据数组推送到结果中,但始终返回空数组。User.find()是异步的,因此不能立即返回值。解决此问题有两种选择: 备选案文1: 接受回调参数并在结果就绪时调用它: module.exports.findUser = function(query){ var result = []; User.find(query, function(err, data){ result.push(data); }); return result; } Common Node

我尝试将数据数组推送到结果中,但始终返回空数组。

User.find()
是异步的,因此不能立即返回值。解决此问题有两种选择:

备选案文1:

接受回调参数并在结果就绪时调用它:

module.exports.findUser = function(query){
  var result = []; 
  User.find(query, function(err, data){
    result.push(data);
  });
  return result;
}
Common Node.js约定的回调包含第一个参数
err
,它将返回任何错误,第二个参数是您正在返回的实际数据

然后将使用如下方式:

module.exports.findUser = function(query, cb) {
    var result = []; 
    User.find(query, function(err, data){
        result.push(data);
        cb(err, result);
    });
}
备选案文2:

返回一个
承诺
,然后可以链接该承诺。这不是超级通用的Node.js约定(选项1是),但它正变得越来越普遍,可能在一两年内成为常态:

findUser('query', function (err, data) {
    if (err) throw new Error(err);
    console.log(data);
});
这将像这样使用:

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);
        });
    }
}
User.find()
是异步的,因此不能立即返回值。解决此问题有两种选择:

备选案文1:

接受回调参数并在结果就绪时调用它:

module.exports.findUser = function(query){
  var result = []; 
  User.find(query, function(err, data){
    result.push(data);
  });
  return result;
}
Common Node.js约定的回调包含第一个参数
err
,它将返回任何错误,第二个参数是您正在返回的实际数据

然后将使用如下方式:

module.exports.findUser = function(query, cb) {
    var result = []; 
    User.find(query, function(err, data){
        result.push(data);
        cb(err, result);
    });
}
备选案文2:

返回一个
承诺
,然后可以链接该承诺。这不是超级通用的Node.js约定(选项1是),但它正变得越来越普遍,可能在一两年内成为常态:

findUser('query', function (err, data) {
    if (err) throw new Error(err);
    console.log(data);
});
这将像这样使用:

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);
        });
    }
}

find
看起来是异步的,所以您在它完成之前返回
find
看起来是异步的,所以您在它完成之前返回它只是返回我[Promise{},Promise{}]这是正确的,它应该返回一个承诺。。你的车快到了。。基本上,您需要附加一个
,然后
。。例如,
findUser('xyz')。然后(函数(数据){
这不是超级普通的Node.js约定
这将改变,我听说节点开发者甚至开始基于内置的承诺..使用
异步
&
等待
将非常好..@Keith我注意到他们也越来越倾向于承诺,这让我很高兴.我是bi承诺的粉丝。有趣的是,你实际上也可以同时做这两件事,接受回调和返回承诺。它们不是相互排斥的。它只是返回我[Promise{},Promise{}]没错,它应该返回一个承诺..你就快到了..基本上你需要附加一个
然后
。例如
findUser('xyz')。然后(功能(数据){
这不是超级普通的Node.js约定
这将改变,我听说节点开发者甚至开始基于内置的承诺..使用
异步
&
等待
将非常好..@Keith我注意到他们也越来越倾向于承诺,这让我很高兴.我是bi承诺的粉丝。有趣的是,你实际上也可以同时做这两件事,接受回访和回复承诺。它们并不是相互排斥的。