We need to filter Response based on its .ok value.
If you type Effect.f ("filter") you will quickly find some .filter functions.
In our case we want to filter that the result is ok, or fail with an error if it's not.
We therefore use filterOrFail:
- In the first parameter we get
Responseand returnresponse.ok - The second parameter is a custom error type in case the predicate fails (
.ok === false)
When working with effect, any new step should be added to
pipe.We are building a series of operations by adding composable blocks to a single
pipe.
const main = fetchRequest.pipe(
Effect.filterOrFail(
(response) => response.ok,
(): FetchError => ({
_tag: "FetchError",
})
),
Effect.flatMap(jsonResponse),
Effect.catchTags({
FetchError: () => Effect.succeed("Fetch error"),
JsonError: () => Effect.succeed("Json error"),
})
);filterOrFail will return the given error (FetchError) when response.ok is false, otherwise it keeps Response as success value.
