누군가 다음 동작을 설명 할 수 있습니까? 그것은 확실히 비동기 I/O로 인한 것입니다. 그러나 아래의 코드는 많은 간단한 예제를 기반으로합니다. 일부는 SO에서 발생합니다. 여기서는 스트림이 예상대로 읽히지 않는 문제를 논의하지 않은 것 같습니다.Node.js ReadableStream 및 Asynchronous Event Listener
그리고 해결책은 무엇입니까? 근본적인 문제를 첫 번째 원칙으로 이해하려고 노력 중이므로 게시 된 npm stream -> string 패키지를 사용하지 말 것을 권합니다. 감사. 단말
$ 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