-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
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(path, title) {
let data = nodeID3.read(path);
let tags = {}
nodeID3.write(tags, path);
}
위에서
downloader();
changeMetadata();
를 실행했을 때, downloader의 모든 실행이 완벽하게 완료된 후 changeMetadata를 실행하고 싶습니다.
위 두함수 모두 Promise 형태로 바꾸어서 await를 붙이거나, async.waterFall .. 을 해봤는데 제가 문법을 못쓰는건지, 아니면 다른 방법으로 해야되는건지 전부 안되더라구요..
위와 같은 상황에서 동기식으로 처리하는 방법과 간단하게 코드 스케치정도 부탁드립니다!!!
위 처럼 함수 두개가 있고 firstFunction의 모든 작업이 완전히 끝난 다음에 secondFunction이 실행될 수 있도록 하고 싶습니다.
답변을 작성해보세요.
0
조현영
지식공유자2020.07.25
new Promise로 감싸신 다음에 resolve 하는 타이밍이 중요한데요. pipe(스트림)은 뒤에 finish 이벤트를 달수있습니다.
pipe(마지막스트림).on('finish', ()=>{resolve()})
이렇게 하면 완벽히 프로미스가 되어서 download에서 await을 앞에 붙이실 수 있습니다.
잘 안 되시면 전체코드를 다음에 알려드리겠스빈다.
답변 1