Future.wait () kann nicht ohne eine Faser warten (während auf eine andere Zukunft in Meteor.method gewartet wird)

ImMeteorIch schreibe eine Methode, die die Unterverzeichnisse eines bestimmten Pfads auf neue Dateien überprüfen muss. Ich möchte zunächst nur die Unterverzeichnisse auflistenMeteor nach dem ichchild_process.exec Ein einfaches Bash-Skript, das die Dateien auflistet, die seit der letzten Ausführung hinzugefügt wurden.

Ich habe einige Probleme damit, dass die Verzeichniserkennung asynchron ist (Error: Can't wait without a fiber). Ich habe eine synchrone Version geschrieben, aber beidesfs.readdir undfs.stat Anstelle ihrer synchronen Alternativen kann ich Fehler abfangen.

Hier ist der Code:

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();
    }

Der FehlerError: Can't wait without a fiber hat zu tun mitfuture2. Wenn ich auskommentiereFuture.wait(dirs) Der Server stürzt nicht mehr ab, aber das ist ungefähr so ​​weit, wie ich versucht habe, dies zu lösen. : /

Ein weiterer_.map Funktion, die ich in einem anderen Teil der Methode verwende, funktioniert gut mit Futures. (siehe auchhttps://gist.github.com/possibilities/3443021 wo ich meine Inspiration gefunden habe)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage