【发布时间】:2020-11-27 04:11:53
【问题描述】:
我正在遍历一个包含本地文件的对象,所有这些文件都肯定存在,将它们读入缓冲区并在每个完成时递增一个计数器。问题是尽管有 319 个文件要读取,但很少(如果有的话)将计数器打印到控制台,显示它通过了所有文件。它神秘地停在 200 的某个地方……每次都不同,而且没有抛出任何错误。
我在一个电子项目中运行它,构建的应用程序在 Mac 上无缝运行,但在 Windows 上无法通过这个循环!我最近更新了所有的包,并在其他方面进行了必要的调整,整个应用程序运行良好.. 除了这个,它让我发疯!
代码如下:
$.each(compare_object, function(key, item) {
console.log(item.local_path); // this correctly prints out every single file path
var f = fs.createReadStream(item.local_path);
f.on('data', function(buf) {
// normally some other code goes in here but I've simplified it right down for the purposes of getting it working!
});
f.on('end', function(err) {
num++;
console.log(num); // this rarely reached past 280 out of 319 files. Always different though.
});
f.on('error', function(error) {
console.log(error); // this never fires.
num++;
});
});
我想知道是否有一个缓存已用尽,或者我是否应该在每次“结束”后销毁缓冲区,但我读过的任何内容都没有表明这一点,即使我尝试过也没有什么区别。很多示例都希望您将其管道传输到某个地方,而我不是。在完整代码中,它会创建完整文件的哈希值并将其添加到每个本地文件的对象中。
【问题讨论】:
-
你用数据做什么?你能用几句话解释一下吗,你是在以某种方式聚合数据吗?
-
一般来说:您将同步代码与异步代码混合在一起。您的代码将同时打开 200 个(或多少个?)文件,这可能是个问题。
-
@kharandziuk 我正在创建读取的每个本地文件的哈希值,然后将该哈希值保存到先前创建的对象中。最终目标是能够将本地文件哈希与 Dropbox 中相同文件的哈希进行比较,以查看文件是否已被修改。在我更新电子和所有节点模块之前,它一直运行良好 - 为什么会改变?
-
node.js 中至少有 3 个版本的流 API。可能,您更新了一个版本的电子,它更新了一个为您提供新版本的流 API 的节点版本。 medium.com/the-node-js-collection/… - 在这里您可以找到流的简史
-
f.on('data', function(buf) {- 你是通过附加缓冲区来构建整个文件吗?
标签: javascript jquery node.js electron