2

私が正しく質問していることを願っていますが、基本的に、NodeJSで、(長い) 計算の後にデータの最終的なチャンクではなく、CommonJSモジュールにデータのストリームを返す方法はありますか? 複数の方法があると仮定すると、それらのテクニックは何ですか?

たとえば、 CommonJSモジュールfindPrimesとして記述された関数があるとします。

find-primes.js

/**
 * @module  findPrimes
 * @param {int} n - Find all primes less than this number
 * @return {array}
 */
module.exports = function(n) {
    if (n < 2) {
        return [];
    } else if (n === 2) {
        return [2];
    }

    var primes = [2];

    for (let i = 3; i < n; i += 2) {
        let is_prime = true;
        let sq = Math.ceil(Math.sqrt(i));

        for (let t = 2; t <= sq; t++) {
            if (i % t === 0) {
                is_prime = false;
                break;
            }
        }

        if (is_prime) {
            primes.push(i);
        }
    }

    return primes;
};

ご覧のとおり、この関数は、入力より小さいすべての素数の配列を返します。これらの数値をすべて計算した後、配列を返します。

このモジュールをノード スクリプトで使用するとします。

index.js

const primes = require('./find-primes.js');

// Usage: `node index.js <num>`
let primes_less_than = process.argv[2];

console.log(primes(primes_less_than));

の引数で上記のスクリプトを実行すると25、次の (予想される) 出力が得られます。

$ node index.js 25
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]

ただし、10,000,000 など、はるかに大きな数を渡したとします。

$ node index.js 10000000
# Takes a while to run before outputting the numbers...

これは機能しますが、理想的には、プログラムが終了する前に、計算した数値の書き出しを開始したいと考えています。

したがって、私のプログラムの実行にはまだ時間がかかりますが、「最初にすべてを計算してからすべての結果を出力する」よりもはるかに高速に画面に情報を出力し始めます。

この効果を達成するための最良の方法は何ですか? ストリーム? 約束

私はこのためのあらゆるテクニックを受け入れています、ありがとう。

4

2 に答える 2