我想听听您对TaskEither
使用fp-ts或其他函数式编程库进行学习的反馈:
- 我
Promise
在处理nodejs流时使用aPromise
,以这种方式使用a是一个好的解决方案吗?最直接的选择是什么? - 我正在使用
.run().then(...)
,.fold
您知道使用我的功能的更简洁的方法吗? - 相同的代码可以在
Either
没有 ? 的情况下重写Promise
?你能给我一个样品吗?
export const md5 = (path: string): TaskEither<string, string> => {
const mkHash = (p: string) =>
new Promise<string>((resolve, reject) => {
const hash = createHash("md5");
const rs = createReadStream(p);
rs.on("error", (error: Error) => reject(error));
rs.on("data", chunk => hash.update(chunk));
rs.on("end", () => {
return resolve(hash.digest("hex"));
});
});
return tryCatch<string, string>(
() => mkHash(path).then(x => x),
message => `cannot create md5 hash: ${message}`
);
};
it("should return right and create md5 hash for a file", () => {
md5(fileName)
.run()
.then(e =>
e.fold(console.log, r => {
expect(r).toBe("SD8ddDad0756a93ded72b823b19dd877");
})
);
});
it("should return left with an error message", () => {
md5(BAD_PATH)
.run()
.then(e =>
e.fold(error => expect(error).toContain("ENOENT"), () => ({}))
);
});