const fetchTester = Effect.gen(function*() {
const prefixUrl = "https://jsonplaceholder.typicode.com";
console.log(`Fetching Prefix url: "${prefixUrl}"...\n`);
for (
const url of [
`${prefixUrl}/todos/1`, // Fetch Result
`${prefixUrl}xx/todos/1`, // RequestFailError
`${prefixUrl}/todos/-2`, // FetchError
`${prefixUrl}/todos/1?variant=invalidJson` // InvalidJsonError
]
) {
const cleanedUrl = url.replace(prefixUrl, "");
yield* safeFetch(url).pipe(
Effect.tap((value) => Effect.log(`Fetch Result (url="${cleanedUrl}"): => ${JSON.stringify(value)}`)),
Effect.catchTags({
"FetchError": (error) => Effect.logError(`Failed to fetch (url="${cleanedUrl}"): => ${error}`),
"InvalidJsonError": (error) => Effect.logError(`Invalid JSON (url="${cleanedUrl}"): => ${error}`),
"RequestFailError": (error) => Effect.logError(`Request failed (url="${cleanedUrl}"): => ${error}`)
}),
Effect.catchAll((error) => Effect.succeed(Effect.logError(`Unknown error (url="${cleanedUrl}"): => ${error}`)))
);
}
});
const fetchTester = Effect.gen(function*() {
const prefixUrl = "https://jsonplaceholder.typicode.com";
console.log(`Fetching Prefix url: "${prefixUrl}"...\n`);
for (
const url of [
`${prefixUrl}/todos/1`, // Fetch Result
`${prefixUrl}xx/todos/1`, // RequestFailError
`${prefixUrl}/todos/-2`, // FetchError
`${prefixUrl}/todos/1?variant=invalidJson` // InvalidJsonError
]
) {
const cleanedUrl = url.replace(prefixUrl, "");
yield* safeFetch(url).pipe(
Effect.tap((value) => Effect.log(`Fetch Result (url="${cleanedUrl}"): => ${JSON.stringify(value)}`)),
Effect.catchTags({
"FetchError": (error) => Effect.logError(`Failed to fetch (url="${cleanedUrl}"): => ${error}`),
"InvalidJsonError": (error) => Effect.logError(`Invalid JSON (url="${cleanedUrl}"): => ${error}`),
"RequestFailError": (error) => Effect.logError(`Request failed (url="${cleanedUrl}"): => ${error}`)
}),
Effect.catchAll((error) => Effect.succeed(Effect.logError(`Unknown error (url="${cleanedUrl}"): => ${error}`)))
);
}
});