エラーロギングを伴うパイプラインの処理を処理するための慣用的な機能的方法を提案できます。サンプルの必須スタイル(JavaScriptの場合):エラーログの処理パイプラインを処理するための慣用的な機能的な方法は何ですか?
const filesToProcess = ['file1.txt','file2.txt','non_existent_file.txt'];
var totalLetterCountImperative = 0;
for (var i = 0; i < filesToProcess.length; i++){
try {
totalLetterCountImperative += fs.readFileSync(filesToProcess[i],'utf8').length;
} catch (e) {
console.log("There is an error whilst processing file: " + filesToProcess[i] + ". Hence, it's skipped. Error: " + e.message);
}
}
console.log("Total Letter Count: " + totalLetterCountImperative);
以下の試みはうまくいくが、やっかいで扱いにくいようだ。また、それはすべてのエラーへの一般的ではありません。
const filesToProcess = ['file1.txt','file2.txt','non_existent_file.txt'];
const totalLetterCount = filesToProcess
.filter(f => fs.existsSync(f))
.map(f => fs.readFileSync(f,'utf8').length)
.reduce((a,b) => a+b);
filesToProcess
.filter(f => !fs.existsSync(f))
.map(f => console.error("There is an error whilst processing file: " + f +". Hence it's skipped. Error: File doesn't exist"));
console.log("Total Letter Count: " + totalLetterCount);
私はEither
の使用について読みました。それが実際に慣用的な方法であれば、誰かが例を挙げ、使用するには良いJavaScriptライブラリを提案できますか?
ありがとうございました。
あなたは、エラー時にパイプラインを放棄 'Either'モナドを使用しますが、あなただけのエラーをログに記録が、パイプラインを継続したい場合は、' Writer'モナドを使用したい場合 。すばらしいGoogle検索で、両方のJSライブラリが見つかりました。 – 4castle
これのためにモナドは必要ないかもしれません。 [検証](https://github.com/folktale/data.validation)申請者を調べてください。これは 'Either'と同様に動作しますが、短絡がなく、エラー処理を目的とした語彙があります。 – ftor