@ effectionx/ scope- eval
在保留资源的同时在一定范围内评价效果业务.
虽然 Scope.run 财务报告和审定财务报表 Scope.spawn 可以在孤立的范围内评价行动,一旦行动返回,资源就会被撕毁. useEvalScope 允许您在现有的范围内引用操作,接收评估的结果,同时为该范围的生命周期保留资源.
使用量
使用Eval范围
创建一个评估业务并保留其资源的范围:
import { main, createContext } from "effection";
import { useEvalScope } from "@effectionx/scope-eval";
await main(function*() {
const context = createContext<string>("my-context");
const evalScope = yield* useEvalScope();
// Context not set yet
evalScope.scope.get(context); // => undefined
// Evaluate an operation that sets context
yield* evalScope.eval(function*() {
yield* context.set("Hello World!");
});
// Now the context is visible via the scope
evalScope.scope.get(context); // => "Hello World!"
});
处理错误
操作安全进行并返回a Result<T>数字 :
import { main } from "effection";
import { useEvalScope } from "@effectionx/scope-eval";
await main(function*() {
const evalScope = yield* useEvalScope();
const result = yield* evalScope.eval(function*() {
throw new Error("something went wrong");
});
if (result.ok) {
console.log("Success:", result.value);
} else {
console.log("Error:", result.error.message);
}
});
框/撤销框
将运行结果作为值的公用事业:
import { main } from "effection";
import { box, unbox } from "@effectionx/scope-eval";
await main(function*() {
// Capture success or error as a Result
const result = yield* box(function*() {
return 42;
});
// Extract value (throws if error)
const value = unbox(result); // => 42
});
API 密码
useEvalScope(): Operation<EvalScope>
创建单独的评估操作范围.
返回 a EvalScope 改为:
scope: Scope- 检查背景的基本效果范围eval<T>(op: () => Operation<T>): Operation<Result<T>>- 评估一个行动
box<T>(content: () => Operation<T>): Operation<Result<T>>
执行操作并捕获其结果( 成功或出错) Result<T>。 。 。 .
unbox<T>(result: Result<T>): T
从 a 提取值 Result<T>,如果它是一个错误.
使用大小写
- 测试: 评估业务并检查上下文/状态而不撕毁
- 资源留存: 通过多种评价保持资源活力
- 错误边界: 安全执行可能失败的操作