2017-10-08 26 views
0
const fs = require('fs') 
const readline = require('readline') 
const stream = require('stream') 

const rl = readline.createInterface({ 
    input: fs.createReadStream('logs_out.txt') 
}) 

var items = new Set() 

// ASYNC FUNCTION READING LINE BY LINE 

rl.on('line', function(line) { 
    let log = JSON.parse(line) 
    // ADDING ITEMS TO A SET TO GET UNIQUE ITEMS COUNT 
    items.add(log.resource) 
}) 

// PRINTING OUT THE SIZE OF THE SET 
console.log(items.size) 

今の問題は、私がこれを行うときconsole.log(items.size)は全てlineの機能が実行されていても前に実行されているので、私は常にセットのサイズのために未定義の取得または0、です。非同期関数内で同期する方法

これを修正する方法。

ありがとうございます。

+0

はい、それは、複数の非同期呼び出しを持つの追加の複雑さを持つことができ、重複するように見えます。 –

+0

私はJSで始まったばかりなので、そのリンクされた答えのすべての概念を理解するのは少し難しいです。 – deadpoolAlready

+0

@deadpoolは、最後の行を 'rl.on(" end "、function(){/ *ここで* /})のようにsthに入れます' –

答えて

0

@strが重複している可能性があると指摘されているように、ここではスタックオーバーフローに関する優れた答えがあります。なぜ非同期アプローチを取り入れたほうがよいのでしょうか。How do I return the response from an asynchronous call?

具体的な問題については、のcloseイベントを使用することをおすすめします。

readline.Interfaceインスタンスは、「close」イベントが発行されると「完了」したものと見なす必要があります。あなたの例では

、あなたは以下を使用することができます。

// PRINTING OUT THE SIZE OF THE SET 
rl.on('close', function() { 
    console.log(items.size) 
} 
関連する問題