• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

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

20.07.25 01:59 작성 조회수 85

0

혼자 해보려고 했는데 너무 안되서 질문합니다 ㅜㅜ..

// downloader.js
const downloader = (url ,title=> {
    ytdl(url).pipe(fs.createWriteStream(`./${title}.mp4`));
    ffmpeg(`./${title}.mp4`)
    .pipe(fs.createWriteStream(`./${title}.mp4`), {end: true})    
}
// changeMetadata.js
function changeMetadata(pathtitle) {
    let data = nodeID3.read(path);
    let tags = {}
    nodeID3.write(tagspath);
}

위에서

downloader();

changeMetadata();

를 실행했을 때, downloader의 모든 실행이 완벽하게 완료된 후 changeMetadata를 실행하고 싶습니다.

위 두함수 모두 Promise 형태로 바꾸어서 await를 붙이거나, async.waterFall .. 을 해봤는데 제가 문법을 못쓰는건지, 아니면 다른 방법으로 해야되는건지 전부 안되더라구요..

위와 같은 상황에서 동기식으로 처리하는 방법과 간단하게 코드 스케치정도 부탁드립니다!!!

위 처럼 함수 두개가 있고 firstFunction의 모든 작업이 완전히 끝난 다음에 secondFunction이 실행될 수 있도록 하고 싶습니다.

답변 1

답변을 작성해보세요.

0

new Promise로 감싸신 다음에 resolve 하는 타이밍이 중요한데요. pipe(스트림)은 뒤에 finish 이벤트를 달수있습니다.

pipe(마지막스트림).on('finish', ()=>{resolve()})

이렇게 하면 완벽히 프로미스가 되어서 download에서 await을 앞에 붙이실 수 있습니다.

잘 안 되시면 전체코드를 다음에 알려드리겠스빈다.