inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js로 웹 크롤링하기

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

164

감사합니다

작성한 질문수 13

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이 실행될 수 있도록 하고 싶습니다.

웹-크롤링 puppeteer nodejs javascript

답변 1

0

제로초(조현영)

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

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

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

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

headless 궁금한게 있어요!

0

413

2

6강 프록시 서버 테스트 관련하여

0

337

2

페이스북 로그인 로그아웃 자동화관련

0

276

2

3-2 axios로 이미지 저장하기에서 axios 관련 오류..

0

269

2

3-1 이미지 다운로드 준비하기 에서 선택자 구성 질문

0

250

3

2-4 csv 출력하기에서 오류 발생

0

294

3

try-puppeteer.appspot.com 을 사용할 수 없나요?

0

150

1

크롬 확장프로그램 관련 질문드립니다.

0

169

1

크롤링 자바스크립트 exe파일

0

554

1

puppeteer 관련

0

598

2

6-3 proxy-database 관련

1

287

1

크롤링을 여러개 돌리려면 어떠한 방법을 선택하는게 좋을까요?

0

793

1

네이버 영화 평점 크롤링 (axis cheerio)

1

487

1

아래 noscript 내용입니다.

0

528

1

크롤링

0

375

1

앱 크롤링

0

1783

1

페이스북 로그인

0

544

1

2019년도 영상이라 error가 나는 걸까요? 2-4. csv에 출력하기에서 error

1

461

1

안녕하세요! for of와 Promise.all 차이점에 관해서 질문드려요!

0

440

2

대량 요청 처리 방법

0

463

1

구글 패스워드 자동입력시 오류

0

249

1

반복크롤링 할 때 아래 질문주신분 하고 약간 형태가 달라요

0

363

2

인스타그램 돔의 value 값으로 쿼리셀렉터 찾을 수 있나요?

0

300

1

페이스북 로그인시 돔이 생성 안되는 문제

0

308

1