在
我首先想要列出
我在异步获取目录时遇到了一些问题(
以下是代码:
错误消息
Meteor
中,我正在编写一个方法,需要检查特定路径的子目录是否有新文件。我首先想要列出
Meteor
中的子目录,然后使用一个简单的 bash 脚本来列出自上次执行以来添加的文件(child_process.exec
)。我在异步获取目录时遇到了一些问题(
Error: Can't wait without a fiber
)。我已经编写了同步版本,但是使用 fs.readdir
和 fs.stat
代替它们的同步替代品可以让我捕获错误。以下是代码:
function listDirs(dir, isDir){
var future1 = new Future();fs.readdir(dir, function(err, files){
if (err)
throw new Meteor.error(500, "Error listing files", err);
var dirs = _.map(files, function(file){
var future2 = new Future();
var resolve2 = future2.resolver();
fs.stat(dir+file, function(err, stats){
if (err)
throw new Meteor.error(500, "Error statting files", err);
if (stats.isDirectory() == isDir && file.charAt(0) !== '.')
resolve2(err, file);
});
return future2;
});
Future.wait(dirs);
//var result = _.invoke(dirs, 'get');
future1['return'](_.compact(dirs));
});
return future1.wait();
}
错误消息
Error: Can't wait without a fiber
与 future2
有关。
当我注释掉 Future.wait(dirs)
后,服务器不再崩溃,但这是我在尝试解决问题时所达到的最远程度。:/
在方法的另一个部分中,我使用了另一个 _.map
函数,它可以很好地处理 futures。(请参阅 https://gist.github.com/possibilities/3443021,这是我找到灵感的地方)
Meteor.bindEnvironment
中确实解决了未来问题。 - jeroentbt