【发布时间】:2019-09-05 23:46:09
【问题描述】:
我正在编写一个小脚本来流式下载和处理来自 url 的多个按顺序命名的文件。我正在使用 highlandjs 并让它一一完美地工作。我正在尝试重构为一个循环,在该循环中我等待一个高地流的完成,然后再开始另一个:
// my attempt to abstract the highland into a promise I can await
const processFile = async (url, path) => {
const writeStream = fs.createWriteStream(path);
return hl(request(url))
.split()
// various working transforms
.map(splitDelim)
.filter(filterSchedAOnly)
.map(appendIdentity)
.filter(filterOnlyIdentified)
.map(convertToCSVsafeString)
// end result should write to a file
.pipe(writeStream)
.toPromise();
// also tried this
// return new Promise((resolve, reject) => {
// writeStream.on("end", () => resolve());
// writeStream.on("error", () => reject());
// });
};
(async () => {
let i = 1;
// infinite loop
while (true) {
const url = `http://.../${i}.txt`;
const filePath = `${i}.processed.csv`;
try {
// does not work!
await processFile(url, filePath);
} catch (err) {
console.log(err);
}
i++;
}
})();
我应该如何包装我的 processFile 函数,以便在继续下一次迭代之前等待它完成?
【问题讨论】:
标签: node.js highland.js