Comments (5)
Perfect. Thank you.
No idea why it was hanging jest but without the throw it seems fine.
from effect.
We seemed to have the same problem when using Effect.async
to wrap it manually
from effect.
We only want to handle certain cases in the catch and die otherwise.
Note that when using tryPromise
with a catch handler to return typed Errors, you are not actually handling the errors, you are just refining them to be handled elsewhere in your application in a type safe manner.
Throwing in catch
is odd and I'd avoid that.
If you want to actually handle specific errors, you could use Effect.catchTag(s)
subsequently.
However, for the purpose of a test, I'd actually do this completely differently and instead match on an Exit
in your program e.g. using Effect.matchCause
or by collecting the final Exit value of your entire program and then matching against that (e.g. using Effect.runPromiseExit
).
from effect.
Yes. I understand I'm only refining them but what if all other cases mean Defect. So you're saying the catch should return BlahFailure | SomeDefectFlag
and then I should die on SomeDefectFlag
back in Effect
land?
from effect.
There's countless ways to achieve that, e.g. you could refine and use Cause.UnknownException
(which is what tryPromise
also uses internally) for the fallback case.
You can then also decide to further elevate that into a defect with a subsequent flipWith
and filterOrDie
. Or you can capture all cases in an Exit
and assert based on that (which is what I usually do).
// Effect.Effect<never, MyRefinedError, never>
const program = Effect.tryPromise({
try: () => Promise.reject(new Error("foo")),
catch: (cause) => {
if (cause instanceof Error && cause.message === "foo") {
return new MyRefinedError(cause)
}
return new Cause.UnknownException(cause)
}
}).pipe(Effect.flipWith(Effect.filterOrDie((cause): cause is MyRefinedError => cause instanceof MyRefinedError, identity)))
// Exit<never, Cause.UnknownException | MyRefinedError>
const exit = await Effect.runPromiseExit(
Effect.tryPromise({
try: () => Promise.reject(new Error("foo")),
catch: (cause) => {
if (cause instanceof Error && cause.message === "foo") {
return new MyRefinedError(cause)
}
return new Cause.UnknownException(cause)
}
})
)
from effect.
Related Issues (20)
- Weblock support in browser platform package HOT 2
- From Discord: Is Option.firstSomeOf expected to work with an array of Data.taggedEnum<AlgebraicDataType?
- Schema.TaggedError doesn't have nicely formatted cause when logged to console (unlike Data.TaggedError)
- Add new Order.localeString ordering option
- Predicate.or should handle refinements as Predicate.and does
- Logged errors only show the first child cause instead of displaying error causes recursively
- RPC File support
- From Discord: Confusion Over Multiple Documentation Versions for Effect-TS API
- From Discord: Schema base64 string -> utf8 string -> json parse
- Suggestion: improve DX of type errors from inside `pipe` and `flow`
- From Discord: Accumulating Incomplete JSON Chunks from a ReadableStream
- Enhance sum type workflow (Data.taggedEnum)
- Cause.UnknownException causes exception when using Bun
- JSONSchema.make does not have same behaviour as JSONSchema.to => erasing properties & not working for some Schema types HOT 7
- Effect.Tag with non Effect-returning functions
- From Discord: TypeScript Type Incompatibility Issue with Generic Schema and Optional Values
- Move type helpers from nested namespace to the top-level namespace HOT 4
- From Discord: decode error which should be caught at compile time
- From Discord: Resolving Kysely Integration Issues in Effect with SqlResolver
- Automatic Mermaid class diagram generation from schema HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from effect.