ich lernen, wie Knoten und ECMAScript 6.Promise.all in Node.js stellt nicht die Funktion dann
Ziel meiner Skript zu verwenden ist, eine Liste von PNG-Dateien in einem Verzeichnis umbenennen. Ich möchte nur die PNG-Dateien umbenennen (es gibt auch JPG) und am Ende die Anzahl der umbenannten Dateien anzeigen. Aufgrund der nicht blockierenden Natur von Node ist es nicht so offensichtlich und ich entschied mich, die Gelegenheit zu nutzen, ES6-Versprechen zu entdecken.
'use strict';
const fs = require('fs-extra');
const dir = '/Users/toto/Desktop/png/';
const suffix = '_IMAGE.';
const regex = /(.*)\.(png)$/;
var nbFiles = 0;
// Rename a png file with a suffix
var renameFile = (filename) => {
return new Promise((resolve, reject) => {
if(regex.test(filename)){
let newFileName = filename.replace(regex, '$1' + suffix + '$2');
fs.rename(dir + filename, dir + newFileName, (err) => {
let msg = filename + ' => ' + newFileName;
if (err) {
console.log('KO : rename of ' + msg);
reject(err);
}
console.log('OK : rename of ' + msg);
resolve(nbFiles++);
});
}
});
};
// Read files in a directory and call renameFile + display number of files renamed
fs.readdir(dir, (err, files) => {
if(err) return console.error(err);
var promise = Promise.all(
files.map(renameFile)
).then(function(nb){
console.log('Number of files renamed : ', nb);
}).catch(function(err){
console.log('Error ', err);
});
});
Das erwartete Ergebnis ist, dass Dateien umbenannt werden und die Nachricht Anzahl der umbenannten Dateien angezeigt wird.
Ich bekomme Dateien umbenannt, aber ich kann keine Nachricht (der dann oder der Catch-Aufruf) sehen. Irgendwas stimmt nicht, aber Debug-Sessions können mir nicht helfen.
Danke für jede Hilfe!
PS: Meine Umgebung ist Knoten 5.10 und OS X 10.11.
Sie sollten wirklich auf der niedrigst möglichen Ebene promisfy - nur ein Versprechen für 'fs.rename' und nichts anderes - keine Logik, keine Protokolle erstellen. Ihr Problem besteht darin, dass Ihr Versprechen niemals gelöst wird, wenn die "Regex" nicht übereinstimmt. – Bergi