機能し、私は私のスクリプトの目的は、ディレクトリ内のPNGファイルのリストの名前を変更するノードとのECMAScript 6Promise.allはその後
を使用する方法を学ぶ呼び出すことはありません。私はpngファイルのみをリネームしたい(jpgもあるとしよう)し、最後にリネームされたファイルの数を表示したい。ノードのノンブロッキングな性質のため、それほど明白ではなく、私はES6の約束を発見する機会を利用することに決めました。
'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);
});
});
期待される結果は、名前が変更されたファイルを取得すると、名前が変更されたファイルのメッセージ数を確認することです。
ファイルの名前が変更されましたが、(その時またはキャッチコールの)メッセージは表示されません。どこかに何か間違っていますが、デバッグセッションは私を助けません。
ありがとうございました!
PS:私の環境はノード5.10とOS X 10.11です。
あなたは本当に最低限のレベルでpromisfyする必要があります - 'fs.rename'の約束だけを作成し、それ以外は何もありません。ロジックもログもありません。あなたの問題は、 'regex'がマッチしないときにあなたの約束が決して解決されないということです。 – Bergi