Effect CommunityEC
Effect Community3y ago
11 replies
wayne

The Impact of `Effect.tryPromise(() => ...)`

Should Effect.tryPromise(() => ...) be discouraged?
Take this code for example:
const getNumbers = Effect.tryPromise(() => new Promise<number[]>((resolve) => resolve([1, 2, 3])));
const getFirstNumber = Effect.gen(function* (_) {
    const numbers = yield* _(getNumbers);
    return yield* _(Array.head(numbers));
});

As a beginner with Effect I was suprised that the type of getFirstNumber is Effect<never, unknown, number> instead of Effect<never, NoSuchElementException, number>
The reason is because NoSuchElementException | unknown collapses to unknown
When I rewrite getNumbers as:
const getNumbers = Effect.tryPromise({
    try: () => new Promise<number[]>((resolve) => resolve([1, 2, 3])),
    catch: (unknown) => new Error(`something went wrong ${unknown}`),
});

then getFirstNumber is Effect<never, Error | NoSuchElementException, number> Therefore, I would say that Effect.tryPromise returning Effect<never, unknown, T>` can cause lots of issues and should be discouraged.
What do you think?
Was this page helpful?