2017-07-30 28 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();`