(u: unknown): u is Schedule<unknown, never, unknown, unknown>Type guard that checks if a value is a Schedule.
Example (Checking for schedules)
import { Schedule } from "effect"
const schedule = Schedule.exponential("100 millis")
const notSchedule = { foo: "bar" }
console.log(Schedule.isSchedule(schedule)) // true
console.log(Schedule.isSchedule(notSchedule)) // false
console.log(Schedule.isSchedule(null)) // false
console.log(Schedule.isSchedule(undefined)) // falseguards
Source effect/Schedule.ts:2581 lines
export const const isSchedule: (
u: unknown
) => u is Schedule<
unknown,
never,
unknown,
unknown
>
Type guard that checks if a value is a Schedule.
Example (Checking for schedules)
import { Schedule } from "effect"
const schedule = Schedule.exponential("100 millis")
const notSchedule = { foo: "bar" }
console.log(Schedule.isSchedule(schedule)) // true
console.log(Schedule.isSchedule(notSchedule)) // false
console.log(Schedule.isSchedule(null)) // false
console.log(Schedule.isSchedule(undefined)) // false
isSchedule = (u: unknownu: unknown): u: unknownu is interface Schedule<out Output, in Input = unknown, out Error = never, out Env = never>A Schedule defines a strategy for repeating or retrying effects based on some policy.
Example (Defining retry and repeat schedules)
import { Console, Data, Effect, Schedule } from "effect"
class NetworkError extends Data.TaggedError("NetworkError")<{
readonly attempt: number
}> {}
// Basic retry schedule - retry up to 3 times with exponential backoff
const retrySchedule = Schedule.max([
Schedule.exponential("100 millis"),
Schedule.recurs(3)
])
// Basic repeat schedule - repeat every 30 seconds forever
const repeatSchedule: Schedule.Schedule<number, unknown, never> = Schedule
.spaced("30 seconds")
const program = Effect.gen(function*() {
let attempts = 0
const result1 = yield* Effect.retry(
Effect.gen(function*() {
attempts++
if (attempts < 3) {
return yield* Effect.fail(new NetworkError({ attempt: attempts }))
}
return "Success"
}),
retrySchedule
)
console.log(result1) // "Success"
yield* Console.log("heartbeat").pipe(
Effect.repeat(repeatSchedule.pipe(Schedule.upTo({ times: 5 })))
)
})
The Schedule namespace contains types and utilities for working with schedules.
Schedule<unknown, never, unknown, unknown> => import hasPropertyhasProperty(u: unknownu, const TypeId: "~effect/Schedule"TypeId)