꾸준히 공부하는 개발자

[Node.js] ReadableStream 을 이용한 dblp.xml 파일 받아오기 본문

Node.js

[Node.js] ReadableStream 을 이용한 dblp.xml 파일 받아오기

kauboy 2019. 12. 20. 20:30

 dblp.xml 이라는 대용량을 한번에 읽어오려다 보니 읽어 지지가 않았다.

 그래서 선임분이 stream을 사용하라고 하여 검색을 해보았다. 비동기로 작동하는 것을 보고 Promise 를 반환하는 식으로 하여

동기적으로 처리할라고 하였다.

 


const asyncXML = (xml) => { //xml은 url
	return new Promise((resolve, reject) => {
		let result = [];
		(async () => {
			const fetchedResource = await fetch(xml)
			const reader = await fetchedResource.body.getReader()

			reader.read().then(function processText({done, value}) {
				if (done) {
					console.log('Stream finished. Content received:')
					console.log(result)
					resolve(result)
					return
				}
				result.push(value)

				return reader.read().then(processText)
			})
		})()
	})
}

 하지만 decode를 먼저하고 resolve 를 하려하니 너무 용량이 커서 그런지 resolve 가 되지를 않았다. 그래서 uInt8array 형식으로 받은다음

밖에서 decode를 한 후 파싱을 하였다.

const string = new TextDecoder("utf-8").decode(value);
Comments