Я пытаюсь выполнить скрипт узла, который загружает некоторые URL. Выглядит это так:
const https = require('https');
const fs = require('fs');
const async = require('async');
function download_cb(err) {
if (err) {
console.log("Download error:"+err);
}
}
function download_file(task) {
const url = task.url;
const dest = task.dest;
var file = fs.createWriteStream(dest);
var request = https.get(url, function(response) {
response.pipe(file);
file.on('finish', function() {
file.close(download_cb); // close() is async, call cb after close completes.
});
}).on('error', function(err) { // Handle errors
fs.unlink(dest); // Delete the file async. (But we don't check the result)
download_cb(err.message);
});
};
function get_urls() {
var queue = async.queue(download_file, 10);
const urls = []; // some array of urls
for (var i=0; i<urls.length; i++) {
queue.push({url: urls[i], dest: dest/*whatever*/});
}
return queue.drain();
}
(async () {
await get_urls().then(()=>{
console.log("All done");
})
})();
Это завершает загрузку только первых 10 URL-адресов и затем завершается, в то время как сообщение «Все выполнено» никогда не отображается. Почему-то кажется, что обещание, возвращаемое функцией (queue.drain ()), никогда не разрешается, даже если его ожидают. Чего мне не хватает?
Я также пытался:
queue.drain = function() {
console.log("All files are downloaded");
};
внутри функции get_urls, но это ничего не меняет, и код в ней тоже не выполняется.