2016-01-02 41 views
2
ytdl(url, { filter: function(format) { return format.container === 'mp4'; } }) 
    .pipe(fs.createWriteStream('./songs/Battle-Scars.mp4')); 

我是新来的node.js,我试图实现一个youtube-mp3转换器,并且我不知道如何使下面的代码只在运行后运行上面的代码完成运行。困惑于如何在node.js中实现异步回调

var proc = new ffmpeg({ source: './songs/Battle-Scars.mp4'}) 
    .withAudioCodec('libmp3lame') 
    .toFormat('mp3') 
    .saveToFile('./songs/Battle-Scars.mp3', function(stdout, stderr) { 
     console.log('file has been converted succesfully'); 
    }); 

我很感谢所有的帮助和提前致谢。

回答

2

由于您正在使用流,您可能需要查看finish event,您可以在写入流完成写入磁盘后触发该触发器。

试着这么做:

var writeStream = fs.createWriteStream('./songs/Battle-Scars.mp4'); 

// Set up event listener 
writeStream.on('finish', function() { 
    var proc = new ffmpeg({ source: './songs/Battle-Scars.mp4'}) 
    .withAudioCodec('libmp3lame') 
    .toFormat('mp3') 
    .saveToFile('./songs/Battle-Scars.mp3', function(stdout, stderr) { 
     console.log('file has been converted succesfully'); 
    }); 
}); 

ytdl(url, { filter: function(format) { return format.container === 'mp4'; } }) 
.pipe(writeStream); 
+0

它适用于所有帮助!谢谢,应该已经看了靠近文档。 – beekeeper