では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も参照してください)