betterator
v2.0.2
Published
A better sync and async iterator API.
Downloads
858
Maintainers
Readme
Features
- 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 :sunglasses:
Install
$ npm i betterator
Usage
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.
Contributing
Stars are always welcome!
For bugs and feature requests, please create an issue.
For pull requests, please read the contributing guidelines.
License
This is not an official Google product.