Возвращает undefined
, потому что это то, что возвращает downloadVideoAsync
.
console.log(
typeof downloadVideoAsync('https://www.youtube.com/watch?v=EsceiAe1B6w')
); // undefined
Чтобы ваш код работал так, как вы хотите, вы должны обернуть video.on('info'
Обещанием.
const downloadVideoAsync = (url) => {
return new Promise((resolve, reject) => {
const video = youtubedl(url,['--format=18'],{ cwd: __dirname });
if(!video)
return reject(new Error('Video is empty...'));
video.on('error', reject);
video.on('info', function(info) {
console.log('Download started');
console.log('filename: ' + info._filename);
console.log('size: ' + info.size);
const videoName = info.fulltitle.replace(/\s+/g, '-').toLowerCase();
if(!videoName)
return reject(new Error('Empty name'));
video.pipe(fs.createWriteStream(`videos/${videoName}.mp4`));
video.on('end', function() {
console.log(`this is the videoName in async ${videoName}`);
resolve(true);
});
});
});
}
Теперь downloadVideoAsync
возвращает Promise
вместо undefined
и будет ждать, пока не будет вызван end
, перед разрешением или отклонит, если видео пустое.