Javascript Nodejs 值未插入数组

标签 javascript angularjs node.js

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/

相关文章:

javascript - Edge 没有加载一些 javascript

javascript - 使用 AngularJS 从 JSON 访问多个数组

javascript - 在 AngularJS 中只返回数组的键

php - 与 php 和 nodejs 共享 memcache

javascript - 逐步在 localStorage 中存储和加载输入数据

javascript - 页面可见性 API 是否先于脚本中的任何其他内容运行

javascript - 这个 Angular 误差是多少?

javascript - 通过 AJAX 渲染 Jade 模板并尝试独立于 HTML 传递/访问数据

javascript - 大量 console.log 后 Node.js 子进程崩溃

c# - 仅支持启用了 Javascript 的用户