繁体   English   中英

fp-ts 如何防止左右两边的导线短路?

[英]fp-ts how to prevent traverse from short circuit on Either left?

我有以下代码:

const tError = (err) => (err instanceof Error ? err : Error("unexpected error"));
const safeImport = TE.tryCatchK((s) => import(s)),tError);
export const run= (globString) => pipe(
  glob.sync(globString),
  TE.traverseArray(safeImport),
  async x => console.log(await x()),
)
//this call outputs
[{_tag: 'Left', left: Error [ERR_MODULE_NOT_FOUND]: Cannot find module...}]

但如果我这样做:

const tError = (err) => (err instanceof Error ? err : Error("unexpected error"));
const safeImport = TE.tryCatchK((s) => import(s)),tError);
export const run= (globString) => pipe(
  glob.sync(globString),
  A.map(safeImport),
  A.map(async x => console.log(await x())),
)
//this call outputs
[
  {_tag: 'Left', left: Error [ERR_MODULE_NOT_FOUND]: Cannot find module...},
  {_tag: 'Right', right:...},{_tag: 'Right', right:...},{_tag: 'Right', right:...},{_tag: 'Right', right:...}
]
//

我想翻转类型,但同时保留左侧和右侧,知道我做错了什么吗?

因此,这样做的方法是不使用TE.traverseArray而是使用T.traverseArray

const tError = (err) => (err instanceof Error ? err : Error("unexpected error"));
const safeImport = TE.tryCatchK((s) => import(s)),tError);
export const run= (globString) => pipe(
  glob.sync(globString),
  T.traverseArray(safeImport),
  async x => console.log(await x()),
)

这将删除 Task 包装器并将其保留为数组的元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM