【发布时间】:2019-03-31 01:16:22
【问题描述】:
大家,
我有一个项目,它询问用户他们的目标 URL 以下载图像并压缩它们。在我询问用户 URL 之后,该过程将图像一个一个异步地下载到一个目录中,但是,在所有文件下载之后,我在这个 Promise 中发送resolve。 resolve 比我创建文件(下载)过程快几毫秒。整个下载过程结束后如何发送resolve?
const download = (uri, filename, callback) => {
request.head(uri, (err, res, body) => {
if(err) return callback(err);
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
});
};
const downloadImages = (target, inputPath) => {
return new Promise((resolve, reject) => {
resource(target)
.then(res => {
let count = 0;
for(let obj in res) {
download(res[obj].request.request.url, path.join(path.parse(inputPath).dir, path.parse(url.parse(res[obj].request.request.url).pathname).base), (err) => {
if(err) reject(err);
console.log(`${path.parse(url.parse(res[obj].request.request.url).pathname).base} file created!`);
count++;
console.log(count);
});
};
resolve(true);
})
.catch(err => {
reject(err);
});
});
};
const compressImages = (inputPath, outputPath, target) => {
return new Promise((resolve, reject) => {
downloadImages(target, inputPath)
.then(res => {
if(res === true) {
console.log('succeed!');
};
})
.catch(err => {
reject(err);
});
});
};
compressImages('lib/img/*', 'lib/cimg/', 'https://webmedya.com.tr').then(res => {
if(res === true) console.log('got it!!!')
}).catch(err => {
console.log(err);
});
而这个过程的结果是:
succeed!
got it!!!!!!!!
*after a 10-25 miliseconds*
webmedya-logo.png file created!
1
google-ajansi-ankara.jpg file created!
2
google-ile-zirveye.png file created!
3
adwords-reklam.png file created!
4
youtube-reklam-logo.png file created!
5
【问题讨论】:
-
你在哪里打电话解决?在您的代码中找不到
-
哦,哇!太抱歉了,我在for...in循环之后添加了,谢谢!
标签: node.js asynchronous download promise request