let count = 0
const makeBusniessService = Effect.gen(function* () {
const limiter = yield* RateLimiter.make({limit: 1, interval: "1 second", algorithm: 'fixed-window'})
const translate = (translations: unknown) => limiter(Effect.promise(() => Promise.resolve(++count)))
return { translate, askQuetions } as const
})
export class BusniessService extends Effect.Tag('BusniessService')<BusniessService, Effect.Effect.Success<typeof makeBusniessService>>() {/*shortend*/}
const aProgrammThatUsesTheBusniessLogicAndIsNonBlocking = Effect.gen(function* () {
yield* Console.log('Before 1')
const arr = [BusniessService.translate({ translations: 'Hello World' }), BusniessService.translate({ translations: 'Hello World' }), BusniessService.translate({ translations: 'Hello World' }), BusniessService.translate({ translations: 'Hello World' })]
const result = yield* pipe(arr, e => Effect.all(e, {concurrency: 'unbounded'})) // <--- here I mean
yield* Console.log('After 1: %o', result)
return result
})
let count = 0
const makeBusniessService = Effect.gen(function* () {
const limiter = yield* RateLimiter.make({limit: 1, interval: "1 second", algorithm: 'fixed-window'})
const translate = (translations: unknown) => limiter(Effect.promise(() => Promise.resolve(++count)))
return { translate, askQuetions } as const
})
export class BusniessService extends Effect.Tag('BusniessService')<BusniessService, Effect.Effect.Success<typeof makeBusniessService>>() {/*shortend*/}
const aProgrammThatUsesTheBusniessLogicAndIsNonBlocking = Effect.gen(function* () {
yield* Console.log('Before 1')
const arr = [BusniessService.translate({ translations: 'Hello World' }), BusniessService.translate({ translations: 'Hello World' }), BusniessService.translate({ translations: 'Hello World' }), BusniessService.translate({ translations: 'Hello World' })]
const result = yield* pipe(arr, e => Effect.all(e, {concurrency: 'unbounded'})) // <--- here I mean
yield* Console.log('After 1: %o', result)
return result
})