誰かが次のような動作を説明できますか?これは確かに非同期I/Oのためですが、以下のコードは多くの簡単な例に基づいていますが、SOからのものもあります。Node.js読み取り可能なストリームと非同期のイベントリスナー
解決策は何ですか?基本的な問題を最初の原則から理解しようとしていますので、公開されているnpmストリーム - 文字列パッケージを使用するようにアドバイスしないでください。ありがとう。ターミナル
$ uname -a
Linux bsh 4.10.0-40-generiC#44~16.04.1-Ubuntu SMP Thu Nov 9 15:37:44 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ node --version
v6.12.0
$ node n.js
o = undefined
data
data
end
出力において
与えられたファイルn.js
'use strict';
const streamToString = (s, cb) => {
const chunks = []
s.on('readable',() => {
console.log('data')
let chunk
while(null !== (chunk = s.read())) {
chunks.push(chunk)
}
})
s.on('end',() => {
console.log('end')
cb(Buffer.concat(chunks).toString())
})
}
let o
const f = (str) => {
o = JSON.parse(str)
}
const fs = require('fs')
const rs = fs.createReadStream('t.json')
streamToString(rs, f)
console.log('o = ' + o)
は簡単な検証JSONを含む、任意の非空の入力ファイルを保持しています。私も「読み取り」イベント、すなわち
s.on('read', (chunk) => {
console.log('data')
chunks.push(chunk)
})
と出力が
o = undefined
data
end