Ich schrieb eine Funktion, die rekursiv ausgeführt wird, um Dateien zu finden, deren Name die angegebene Welt enthält. Ich verstehe nicht, wie Versprechungen funktionieren und finde keine Möglichkeit, diese Funktion mit Versprechen zu schreiben, obwohl ich mich sehr bemüht habe.Callbacks mit For-Schleife und Rekursion zu Verheißungen konvertieren
Ich versuchte, ein Versprechen innerhalb der Funktion findPath zurückzugeben, aber ich konnte es nicht verwenden, da extractFiles Aufrufe findPath. Ich habe versucht, eine Liste von Versprechungen zu erstellen und alle zurückzuschicken, aber auch keinen Erfolg.
Also wie könnte ich diese Funktionen mit Versprechen schreiben?
const fs = require('fs');
const path = require('path');
function findPath(targetPath, targetWord, done) {
if (!fs.existsSync(targetPath)) return;
fs.readdir(targetPath, (err, allPaths) => {
if (err) done(err, null);
for (aPath of allPaths) {
aPath = path.join(targetPath, aPath);
extractFiles(aPath, targetWord, done);
}
});
function extractFiles(aPath, targetWord, done) {
fs.lstat(aPath, (err, stat) => {
if (err) done(err, null);
if (stat.isDirectory()) {
findPath(aPath, targetWord, done);
}
else if (aPath.indexOf(targetWord) >= 0) {
let fileName = aPath.split('.')[0];
done(null, fileName);
}
});
}
}
findPath('../modules', 'routes', file => {
console.log(file);
});
schreiben Sie dies für die Praxis oder weil Sie es brauchen? –
scheint "fertig" könnte mehr als einmal zurückgerufen werden? Ist das korrekt? –
@DayanMorenoLeon für die Praxis funktioniert die Funktion gut mit Rückrufen. Ich versuche es zu konvertieren, um Versprechungen zu bekommen. Ich beobachte die meisten Vorträge bei youtube, aber sie alle geben einfache Beispiele. –