0

このコード スニペットのコードを理解するのに苦労しています。私はコメントして調査してきましたが、問題が発生しました。2 つの障害に遭遇しましたが、1 つは古い 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);
};

このコード スニペットの主な問題は、2 番目の関数に関係しています。彼らは関数を呼び出し元の関数に戻していますが、なぜresponse2console関数に2つのパラメーターがあるのか​​ わかりませんが、市場調査関数で使用されているときに関数にパラメーターが渡されないようです. これらはデフォルト パラメータですか、それともダミー パラメータですか。それらは使用されているように見えるので、パラメータをどこかから取得する必要がありますか? それらは csvfile とヘッダーに対応していますか?

私の 2 番目の問題は、.on() 関数に関係しています。csvのドキュメントを見ましたが、これが何をするのかについてのコメントは見つかりませんでした。彼らはそれを使うだけのようです。さらに調査した結果、これは javascript または node.js のイベント関数であり、「レコード」はイベントの一種であるという結論に達しました。しかし、この「記録」イベントが何であるかについてのドキュメントはどこにも見つかりません。どこを見るべきか、または問題の助けについての提案をいただければ幸いです。

csv ドキュメント: http://www.adaltas.com/projects/node-csv/from.html

4

1 に答える 1

2

ただし、市場調査機能で使用される場合、関数にパラメーターが渡されることはないようです

これは、関数内で呼び出されていないためです。marketResearch代わりに に渡され.on()、イベントで呼び出されるイベント ハンドラとして登録されcompleteます。

私の 2 番目の問題は、.on() 関数に関係しています。csvのドキュメントを見ましたが、これが何をするのかについてのコメントは見つかりませんでした

onメソッドはモジュールの一部ではなく、モジュールcsvの一部restです。response2console受信したファイルと http ヘッダーを使用して関数をコールバックし、HTTP リクエストを発行するようです。ちょっと待って、あなたは他の用途を意味します.

はい、あなたの結論は正しいです。これは、ここの紹介で文書化されています。

イベント:

このライブラリは Node EventEmitterクラスを拡張し、Writable and Readable Stream APIのすべてのイベントを発行します。さらに、便利な「レコード」イベントが発行されます。

  • record
    新しい行が解析および変換されるときに stringifier によって発行されます。データは、ユーザー transformコールバックがあればそれによって返される値です。ただし、レコードがスキップされるため、transform返さ れた場合、イベントは呼び出されないことに注意してください。nullコールバックは 2 つの引数を提供します。rowは処理中の CSV 行 (配列またはオブジェクト) でありindex、ゼロから始まる行のインデックス番号です。
  • …</li>
于 2014-06-06T04:52:10.493 に答える