arrays - node.js:返回模块中的数组

标签 arrays node.js function return

我对 Node.js 及其编程本身不熟悉。我试图在另一个程序中调用一个函数,但我从未得到结果。我调用的函数工作正常,结果正确并且调用该函数也工作正常,但我想要返回的数组没有返回。程序运行时没有错误(遗憾的是控制台上没有输出)。我检查了几个教程,但找不到与我正在做的事情有什么不同。 我尝试输入“返回(结果);”在函数末尾(在关闭最后一个“}”之前),但这样做数组再次为空。 我很欣赏每一个想法。

问候,尼尔斯

1. prog: calling the function:

var input = require('./einlesen.js');
var output = input.einlesen('GZV.csv', ';', 1, 2, function(err, yay)
{   
console.log(output);
});

2. prog: the function:

    var einlesen = function(datei, trennzeichen, zelle1, zelle2) 
    {
    var result = [];                                            //Ergebnis array beinhaltet start und endknoten

    var fs = require('fs'),                                     //filestream einbinden um fs.open etc zu nutzen
    data = 'Daten/' + datei;

    fs.open(data, 'r', function(err, handledata)                //zu prüfende Datendatei einbinden
    {
        fs.stat(data, function(err,datastats)                   //dateiinformationen über größe auslesen
        {
            var datasize = datastats.size,
            databuffer = new Buffer(datasize);
            var dataarray = [];

            fs.read(handledata, databuffer, 0, datasize, 0, function(err, bytes, datacontent)       //Datei zum lesen öffnen
            {
                var datalines = datacontent.toString().split("\n");                                 //array mit Zeilen der Datei füllen

                for (var i=0; i < datalines.length - 1; i += 1)                                     //Zeile für Zeile die Daten bearbeiten
                {
                    dataarray[i] = datalines[i].split(trennzeichen);                                //Zeile aufsplitten
                    dataarray [i][zelle1] = dataarray[i][zelle1].trim();                            //Leerezeichen entfernen
                    dataarray [i][zelle1] = dataarray[i][zelle1].trim('\r');                        // \r abschneiden
                    if (zelle2 != 'n')
                    {
                        dataarray [i][zelle2] = dataarray[i][zelle2].trim();                        //Leerzeichen entfernen
                        dataarray [i][zelle2] = dataarray[i][zelle2].trim('\r');                    // \r abschneiden
                    }
                    result[i] = [dataarray[i][zelle1], dataarray[i][zelle2]];
                }
            fs.close(handledata);
            });
        });
    });
    }
    exports.einlesen = einlesen;

最佳答案

结果不会传递回调用者(使用回调)。这是更改:

prog:调用函数:

var input = require('./einlesen.js');
input.einlesen('GZV.csv', ';', 1, 2, function(err, output)
{   
    console.log(output);
});

einlesen.js:

注意:最后一个参数“callback”被添加到该函数中。另外,最后会调用callback()来返回结果

var einlesen = function(datei, trennzeichen, zelle1, zelle2, callback) {
    var result = [];                                            //Ergebnis array beinhaltet start und endknoten

    var fs = require('fs'),                                     //filestream einbinden um fs.open etc zu nutzen
    data = 'Daten/' + datei;

    fs.open(data, 'r', function(err, handledata, callback) {
        fs.stat(data, function(err,datastats) {
            var datasize = datastats.size,
            databuffer = new Buffer(datasize);
            var dataarray = [];

            fs.read(handledata, databuffer, 0, datasize, 0, function(err, bytes, datacontent) {
                var datalines = datacontent.toString().split("\n");                                 //array mit Zeilen der Datei füllen

                for (var i=0; i < datalines.length - 1; i += 1) {
                    dataarray[i] = datalines[i].split(trennzeichen);                                //Zeile aufsplitten
                    dataarray [i][zelle1] = dataarray[i][zelle1].trim();                            //Leerezeichen entfernen
                    dataarray [i][zelle1] = dataarray[i][zelle1].trim('\r');                        // \r abschneiden
                    if (zelle2 != 'n') {
                        dataarray [i][zelle2] = dataarray[i][zelle2].trim();                        //Leerzeichen entfernen
                        dataarray [i][zelle2] = dataarray[i][zelle2].trim('\r');                    // \r abschneiden
                    }
                    result[i] = [dataarray[i][zelle1], dataarray[i][zelle2]];
                }
                fs.close(handledata);
                callback(null, result);   // 1st argument: null means no error, 2nd argument is the reuslt
            });
        });
    });
};
exports.einlesen = einlesen;

关于arrays - node.js:返回模块中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455382/

相关文章:

javascript - 如何打印出 3 的倍数除以无余数的数字?

c++ - 从 C++ 中的函数返回数组

javascript - 从 JSON 对象 KEYS 创建字符串 - Vanilla JavaScript 或 lodash

node.js - 在nodejs中使用gm的圆角

javascript - 异步函数与等待

function - 带有 IF 语句的向量函数的 MATLAB 返回

javascript - 在不使用 jQuery 的情况下在 JavaScript 中将表转换为数组

javascript - 如何更新浏览器列表?

function - Julia 中局部变量不受支持的 `const` 声明

javascript - 我的功能有一个我似乎无法解决的问题。目前,它说无法在连接槽处读取undefined的 'split'属性