Javascript - 返回来自专家的对象数组,给出Undefined - NodeJS

时间:2017-02-16 17:43:20

标签: javascript

在我的节点JS Server上,我有我的模块文件。我的模块文件连接到数据库并提取行列表。我正在导出一个返回对象数组的函数。基本上我会把我从数据库中获取的信息返回给我的主脚本,然后用它做一些事情。

这就是我的模块脚本的样子

- mymodule.js -

function smsdcontact(fname, lname, smsdcell, smsdemail) {
    this.fname = fname;
    this.lname = lname;
    this.smsdcell = smsdcell;
    this.smsdemail = smsdemail;
}

var smsdgetlist = function (smsdgroupid) {


var smsdlist = [];

connection.connect();
connection.query('SELECT * from mymembers', function(err, rows, fields) {
if (!err) {
    console.log('The number of rows found are: ', rows.length);
    for (i = 0; i < rows.length; i++) {
        smsdlist.push (new smsdcontact(rows[i].memfname,rows[i].memlname,rows[i].memcell,rows[i].mememail));
    }
    connection.end();
    console.log(smsdlist);
    return smsdlist;
}
  else
    console.log('Error while performing Query.'+err);
});
}

exports.smsdgetlist = smsdgetlist;'

我的主要脚本看起来像那样

- main.js -

var test = require("./smsdsql.js");
var returnedarray = test.smsdgetlist("0");
console.log(returnedarray)

输出看起来像那样

- 输出 -

C:\node main.js
undefined
The number of rows found are:  2
[ smsdcontact {
    fname: ‘user 1 first name',
    lname: ‘use 1 last name',
    smsdcell: ‘user 1 cell phone',
    smsdemail: ‘user 1 email },
  smsdcontact {
    fname: 'user 2 first name'',
    lname: 'user 2 last name',
    smsdcell: 'user 2 cell phone',
    smsdemail: ‘user 2 email' } ]

所以问题在于听起来未定义回报

1 个答案:

答案 0 :(得分:1)

修改

Wait until fs.readFileSync is done的重复 - 完全相同的逻辑。

您正在执行异步操作,因此您无法将其结果分配给变量。您可以做的是将callback参数(这是一个函数)添加到smsdgetlist函数,并使用result调用它,在您的情况下为smsdlist < / p>

function smsdgetlist(smsdgroupid, callback){
    connection.connect();
    connection.query(query, function(err, rows, fields){
        for (i = 0; i < rows.length; i++) {
            smsdlist.push (new smsdcontact(rows[i].memfname,rows[i].memlname,rows[i].memcell,rows[i].mememail));
        }
        // after pushing all elements to desired variable, use the callback
        connection.end();
        callback(smsdlist);
    });
}

你在main.js做的事情将是

var test = require("./smsdsql.js");
test.smsdgetlist("0", function(result){
    console.log(result); // here you would obtain the smsdlist array from smsdgetlist function
});