【发布时间】:2011-09-08 19:07:49
【问题描述】:
我刚遇到这种可怕的情况,我有一个字符串数组,每个字符串都代表一个可能存在的文件(例如var files = ['file1', 'file2', 'file3']。我需要遍历这些文件名并尝试查看它是否存在于当前目录中,并且如果是,则停止循环并忘记其余剩余文件。所以基本上我想找到其中的第一个现有文件,如果没有找到则回退到硬编码消息。
这是我目前拥有的:
var found = false;
files.forEach(function(file) {
if (found) return false;
fs.readFileSync(path + file, function(err, data) {
if (err) return;
found = true;
continueWithStuff();
});
});
if (found === false) {
// Handle this scenario.
}
这很糟糕。它正在阻塞 (readFileSync),因此速度很慢。
我不能只为fs.readFile 提供回调方法,这并不是那么简单,因为我需要获取第一个找到的项目......并且可以以任何随机顺序调用回调。我认为一种方法是有一个回调来增加一个计数器并保留一个找到/未找到信息的列表,当它达到files.length 计数时,它会检查找到/未找到的信息并决定下一步做什么.
这很痛苦。我确实看到了事件 IO 的出色性能,但这是不可接受的。我有什么选择?
【问题讨论】:
-
这就是 node.js 的工作方式。确实,对我来说,这似乎并没有那么糟糕。在具有异步响应的任何环境中,您都会遇到完全相同的问题。
标签: javascript asynchronous node.js callback