A better sync and async iterator API.
- Intuitive: easy to use
hasNext
andgetNext
methods - Familiar: lots of other programming languages use the same API
- Tiny: ~400 bytes minzipped
- Awesome Name: you have to admit it's pretty rad 😎
$ npm i betterator
import { Betterator, AsyncBetterator } from 'betterator'
const slothActivities = [`sleeping`, `eating`, `climbing`]
// Or `new Betterator(slothActivities[Symbol.iterator]())`
const iterator = Betterator.fromIterable(slothActivities)
while (iterator.hasNext()) {
console.log(iterator.getNext())
}
//=> sleeping
//=> eating
//=> climbing
try {
iterator.getNext()
} catch (e) {
console.log(e.message)
}
//=> Doesn't have next
console.log(iterator.getNextOr(() => `being lazy`))
//=> being lazy
const asyncSlothActivities = (async function* () {
yield* slothActivities
})()
// Or `new AsyncBetterator(slothActivities[Symbol.asyncIterator]())`
const asyncIterator = AsyncBetterator.fromAsyncIterable(asyncSlothActivities)
while (await asyncIterator.hasNext()) {
console.log(await asyncIterator.getNext())
}
//=> sleeping
//=> eating
//=> climbing
try {
await asyncIterator.getNext()
} catch (e) {
console.log(e.message)
}
//=> Doesn't have next
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout))
console.log(
await asyncIterator.getNextOr(() => delay(10).then(() => `being lazy`)),
)
//=> being lazy
See the type definitions for more documentation.
Stars are always welcome!
For bugs and feature requests, please create an issue.
For pull requests, please read the contributing guidelines.
This is not an official Google product.