2017-07-30 2 views
0

で働いている私は、このプログラムは、チャンクでデータの書き込みされていない理由を私は得ていないのです、次のプログラムのNode.jsストリーム、ドレインはこのコード

// this program will result in "JavaScript heap out of memory" 
const fs = require('fs'); 

const printer = function() { 
    const fil = fs.createWriteStream('./file'); 
    let i = 0; 

    const writer = function() { 
    while (i < 1e6) { 
     if(fil.write("Hello man\n")) { 
     i += 1; 
     // console.log(i); 
     } 
     else { 
     fil.once('drain', writer); 
     } 
    } 
    } 

    return writer; 
} 

const printty = printer(); 
printty(); 

を使用して、大きなファイルを記述しようとしています。また、カウントは約1638でハングアップするようです。何か案が?ありがとう。

答えて

1

同期ループ内でdrainを呼び出すとすぐに書き込みが行われます。実行する時間を与えなければなりません。

シンプルreturnこれを解決することができます

const fs = require('fs'); 

const printer = function() { 
    const fil = fs.createWriteStream('./file'); 
    let i = 0; 

    const writer = function() { 
    while (i < 1e6) { 
     if(fil.write("Hello man\n")) { 
     i += 1; 
     } 
     else { 
     fil.once('drain', writer); 
     return; // give the drain time to execute 
     } 
    } 
    } 

    return writer; 
} 

const printty = printer(); 
printty();` 
関連する問題