【发布时间】:2013-08-23 04:48:48
【问题描述】:
在Meteor 中,我正在编写一个必须检查某个路径的子目录中是否有新文件的方法。
我首先想列出Meteor 中的子目录,然后我child_process.exec 一个简单的bash 脚本列出了自上次执行以来添加的文件。
我在将目录发现设为异步时遇到了一些问题 (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 函数可以很好地处理期货。 (另请参阅 https://gist.github.com/possibilities/3443021 我找到灵感的地方)
【问题讨论】: