伯爵

2014-07-22 156 views
0

我使用异步下载对每个请求的URI并在达到计数时,关闭下载图像,但是我发现我仍在运行到文件的相同的问题不下载正确和之前退出达到最大值。解决这个问题的最好方法是什么?一如既往,感谢您的帮助。伯爵

async.each(images, function (image, callback) { 
    var uri = image.attribs.src; 
    var random = (Math.random() * (3 - 1) + 1) | 0; 
    var stream = fs.createWriteStream(outFile); 
    request(uri).pipe(stream); 
    stream.on('finish', callback); 
    console.log('[' + chalk.green('✓') + ']' + ' wrote image ' + count); 
    count++; 
    if (count === commander.max) { 
    process.exit(0); 
    } 
    sleep.sleep(random); 
}, function (error) { 
    if (error) { 
     console.log('[' + chalk.red('×') + ']' + ' failed on image ' + count); 
    } 
}); 

回答

1

您并不是真的在等待每个请求的完成,也没有调用回调函数。你需要听您所发送到管道中的可写流finish事件。所以,你会希望你的代码看起来是这样的:

async.each(images, function (image, callback) { 
    var uri = image.attribs.src; 
    var random = (Math.random() * (3 - 1) + 1) | 0; 
    var writable = fs.createWriteStream(outFile); 
    request(uri).pipe(writable); 
    writable.on('finish', callback); 
    console.log('[' + chalk.green('✓') + ']' + ' wrote image ' + count); 
    count++; 
    if (count === commander.max) { 
     process.exit(0); 
    } 
    sleep.sleep(random); 
}, function (error) { 
    if (error) { 
     console.log('[' + chalk.red('×') + ']' + ' failed on image ' + count); 
    } 
}); 

在这里看到的更多信息:http://nodejs.org/api/stream.html#stream_event_finish

+0

我仍然只得到9图像时,我指定的最大值为10。另外,我希望能够对对最终的事件,但图像仍然没有完成下载 – theGrayFox

+0

你可以更新您正在使用的代码你的答案? –

+0

我更新了。格式可能稍微偏离一点,但这就是大部分情况。看到什么? – theGrayFox