0

我在理解此代码段中的代码时遇到了一些麻烦。我一直在评论和研究,但我遇到了障碍。好吧,我遇到了两个障碍,但其中一个与过时的 csv 库有关。这是代码片段:

var csv2console = function(csvfile, headers) {
    console.log(headers.join("\t"));

    csv()
    .from.path(csvfile)
    .on('record', function(row, index) {
        var shares = Math.round(marketCapFloat(row[2])/row[3], 0);
        var eps = (row[3]/row[4]).toFixed(3);
        var earnings = accounting.formatMoney(eps * shares);
        outrow = row.concat([shares, eps, earnings]);
        console.log(outrow.join("\t"));
    });
};

var buildfn = function(csvfile, headers) {
    var response2console = function(result, response) {
        if (result instanceof Error) {
            console.error('Error: ' + util.format(response.message));associated with the error?
        } else {
            console.error("Wrote %s", csvfile);
            fs.writeFileSync(csvfile, result);
            csv2console(csvfile, headers);
        }
    };
    return response2console;
};

var marketResearch = function(symbols, columns, csvfile, headers) {
    symbols = symbols || SYMBOLS_DEFAULT;
    columns = columns || COLUMNS_DEFAULT;
    csvfile = csvfile || CSVFILE_DEFAULT;
    headers = headers || HEADERS_DEFAULT;
    var apiurl = financeurl(symbols, columns);
    var response2console = buildfn(csvfile, headers);
    rest.get(apiurl).on('complete', response2console);
};

我对这个代码片段的主要问题与第二个函数有关。我知道他们正在将一个函数传递回调用函数,但我不明白为什么 response2console 函数有两个参数,但在市场研究函数中使用它时似乎没有任何参数传递给该函数. 这些是默认参数还是虚拟参数?它们似乎正在被使用,所以参数需要从某个地方获取?它们是否与 csvfile 和 headers 对应?

我的第二个问题与 .on() 函数有关。我查看了 csv 文档,但找不到任何关于它的作用的评论。他们似乎只使用它。经过更多研究,我得出结论,这是一个 javascript 或 node.js 事件函数,并且“记录”是一种事件。但是我在任何地方都找不到这个“记录”事件是什么的文档。任何关于在哪里寻找的建议或任何帮助将不胜感激。

csv 文档: http: //www.adaltas.com/projects/node-csv/from.html

4

1 回答 1

2

然而,当它用于市场研究功能时,似乎没有任何参数传递给该函数

那是因为它没有在函数中调用。marketResearch相反,它被传递给.on(),将其注册为事件处理程序,以便通过complete事件调用。

我的第二个问题与 .on() 函数有关。我查看了 csv 文档,但找不到任何关于它的作用的评论

on方法不是csv模块的一部分,而是rest模块的一部分。它似乎发出了一个 HTTP 请求,response2console用接收到的文件和 http 标头回调函数。哦等等,你的意思是其他用途。

是的,你的结论是正确的。这在介绍中记录在这里

活动

该库扩展了 Node EventEmitter类并发出 Writable 和 Readable Stream API的所有事件。此外,还会发出有用的“记录”事件。


  • 解析和转换新行时由字符串化器发出的记录。数据是用户 transform回调返回的值(如果有)。但是请注意,如果由于跳过记录而transform返回 ,则不会调用该事件。null回调提供了两个参数。row是正在处理的 CSV 行(数组或对象),并且index是从零开始的行的索引号
  • …</li>
于 2014-06-06T04:52:10.493 回答