我的代码需要一行,并试图从Google转换MP3格式。
但是,对于异步函数fs.exists(...)
,循环太快,并且只获取数组中的最后一行。我猜测循环正在改变变量filename
和line
,甚至在它们被请求之前。
对此有什么好处?我可以看到使用fs.existsSync(...)
作为一种可能的解决方案,但是有一个更好的吗?
for (var i = 0, length = lines.length; i < length; i++) {
// Get the line in question
var line = lines[i].trim();
// The saving filename
var filename = crypto.createHash('md5').update(line).digest('hex') + ".mp3";
// Does the file exist?
fs.exists(filename, function(exists) {
console.log(line + "->" + filename);
// We have to process it!
if (!exists) {
request
.get({
'url': url,
'qs': {
'tl': lang,
'q': line,
'ie': 'UTF-8'
}
})
.on('error', function(error) {
console.error(error);
})
.on('response', function(response) {
if (response.statusCode != 200) {
console.error(response);
}
})
.pipe(fs.createWriteStream(filename));
}
});
}