我正在尝试异步下载文件。我可以使用Promises做到这一点。我正在尝试弄清楚一旦完成文件修补程序将如何返回。我真费劲地试图弄清楚如何让这件事等到文件已写入磁盘。
如果有更好的方法,而无需使用回电,我将乐意提供任何建议。
这是我的职能。
async function downloadFile(urlToFile, filename) {
return new Promise( resolve => {
const download = request({ url: urlToFile, followAllRedirects: true }).pipe(fs.createWriteStream(filename).on('finish', resolve));
});
};
我在另一个文件中等待它。
答案 0 :(得分:2)
可写流的事件finish
实际上并不意味着一切都完成了。它仅表示将数据写入相关文件的过程已完成。那时,文件描述符仍在打开,文件尚未准备好使用。如果要检查是否真的完成所有操作,则需要使用事件close
。
async function downloadFile(urlToFile, filename) {
return new Promise( (resolve, reject) => {
const fstream = fs.createWriteStream(filename);
fstream.on('close', resolve);
fstream.on('error', reject);
const download = request({ url: urlToFile, followAllRedirects: true }).pipe(fstream);
});
};