任何人都可以提出處理具有錯誤日誌記錄的管道的慣用功能方式。示例命令式(在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'單子。快速谷歌搜索發現兩個JS庫。 – 4castle
也許你不需要monad。看看[驗證](https://github.com/folktale/data.validation)應用程序。它的行爲類似於'Either',但沒有短路,並且有一個旨在處理錯誤的詞彙。 – ftor