💯 A better sync and async iterator API.
APACHE-2.0 License
hasNext
and getNext
methods$ 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.