인프런 커뮤니티 질문&답변

감사합니다님의 프로필 이미지
감사합니다

작성한 질문수

Node.js로 웹 크롤링하기

js 동기처리에 대해 질문드립니다(2)

작성

·

165

0

여전히 같은 문제가 발생하여 다시 질문합니다

말씀해주신대로 'end' 이벤트 부분에서 resolve를 해주었지만 실제로 then 부분에서 promise가 resolve되지 않는것 같습니다...

정말 죄송한데 코드 한번만 확인해주실수 있나요??ㅠㅠ.. 

실제로 resolve하는 부분은 ./js/index.js 파일에 있고, promise 함수는 ./js/downloader.js 파일에 있습니다 (retry 함수는 에러가 발생했을 때, 30번 까지 다시 시도해주는 함수입니다. 이부분 역시 promise로 만들었습니다)

답변 3

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아, 기존 pipe에 on을 붙이시면 안되고요

const ws = fs.createWriteStream;

ytdl.....pipe(ws)

ws.on('finish', resolve)

이렇게 롸이트스트림을 변수로 분리하신 후 롸이트스트림에 연결해주셔야 하네요.

0

on('finish')를 이용하여 console에 찍히는 과정을 보면 에러가 발생하거나 프로세싱이 완료되지 않았을 때도 'finish' 이벤트로 들어가게 되어 동기적으로 작동하지 않게 됩니다ㅜㅜ..

공식문서에 프로세싱이 완료되었을 때, 발생하는 이벤트가 'end' 이벤트라 작성되어 있어서 'end' 이벤트가 완전히 종료된 이후 resolve 해야 원하는 방식으로 작동할 것 같은데 'end' 이벤트가 발생한 후 resolve는 못하는 건가요??

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

저기에 on 부분을 아래 pipe(writeStream) 아래에 달아주세요. 그래야 writeStream이 끝난 후 실행됩니다.

그리고 end는 finish로 대체해서 달아주세요. pipe(fs.writeStream).on('finish')

감사합니다님의 프로필 이미지
감사합니다

작성한 질문수

질문하기