提问人:Adam Arold 提问时间:10/29/2023 最后编辑:Adam Arold 更新时间:10/29/2023 访问量:22
使用fp-ts时,如何在括号的获取阶段添加动态依赖?
How to add dynamic dependencies in the acquire phase of a bracket when using fp-ts?
问:
我想知道是否有一种方法可以将元素添加到仅存在于 .我试图做的是为我执行的东西创建一个事务,并在 中释放 tx。这是我试图实现的目标的一个简化示例:use
bracket
use
release
type TxContext = {
tx: string;
}
type MyDeps = {
getMyData: () => RTE.ReaderTaskEither<
TxContext,
Error,
string
>;
};
const executeOperation = () =>
bracketW(
pipe(
Do,
bindW("deps", () => ask<MyDeps>()),
// start transaction would be here
bindW("tx", () => right("this is a transaction")),
map(({ deps, tx }) => ({
...deps,
tx,
}))
),
({ getMyData, tx }) => {
// no way to pass the tx to the operation here
return pipe(
getMyData(),
map((data) => `got the data: ${data}`),
);
},
(d, e: E.Either<Error, string>) =>
// close transaction would be here
pipe(fromEither(e), map(constVoid))
);
我的问题是这会将 作为强制参数添加到 .有没有办法防止这种情况发生?作为步骤的一部分,我想在括号内创建 tx。tx
R
ReaderTaskEither
acquire
我尝试了另一种解决方案:
const executeOperation = () =>
bracketW(
pipe(
Do,
bindW("deps", () => ask<MyDeps>()),
bindW("tx", () => right("this is a transaction")),
map(({ deps, tx }) => ({
...deps,
tx,
}))
),
(deps) => {
const { getMyData, tx } = deps;
// pass the deps and re-wrap into a new ReaderTaskEither
return fromTaskEither(
pipe(
getMyData(),
map((data) => `got the data: ${data}`)
)({ tx })
);
},
(d, e: E.Either<Error, string>) =>
pipe(fromEither(e), map(constVoid))
);
但这对我来说感觉很骇人听闻。fp-ts 是否有开箱即用的解决方案?
答: 暂无答案
评论