JSPM

get-iterator

1.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 243768
  • Score
    100M100P100Q161722F
  • License MIT

Get the default iterator or async iterator for an Iterable.

Package Exports

  • get-iterator

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (get-iterator) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

get-iterator

Build Status dependencies Status JavaScript Style Guide

Get the default iterator or async iterator for an Iterable.

Reduce the boilerplate of extracting the iterator from an object when you don't know if the object is an (async) iterable or already an (async) iterator.

Install

npm install get-iterator

Usage

const getIterator = require('get-iterator')
const input = [1, 2, 3]
const it = getIterator(input)
console.log(it.next()) // { done: false, value: 1 }
console.log(it.next()) // { done: false, value: 2 }
console.log(it.next()) // { done: false, value: 3 }
console.log(it.next()) // { done: true, value: undefined }

Examples

Regular iterator from iterable:

const getIterator = require('get-iterator')

const input = [1, 2, 3]
const iterable = {
  [Symbol.iterator] () {
    let i = 0
    return {
      next () {
        const value = input[i++]
        return { done: !value, value }
      }
    }
  }
}

const it = getIterator(input)
console.log(it.next()) // { done: false, value: 1 }
console.log(it.next()) // { done: false, value: 2 }
console.log(it.next()) // { done: false, value: 3 }
console.log(it.next()) // { done: true, value: undefined }

Async iterator from iterable:

const getIterator = require('get-iterator')

const input = [1, 2, 3]
const iterable = {
  [Symbol.asyncIterator] () {
    let i = 0
    return {
      async next () {
        const value = await new Promise((resolve, reject) => {
          setTimeout(() => resolve(input[i++]), 10)
        })
        return { done: !value, value }
      }
    }
  }
}

const it = getIterator(iterable)
console.log(await it.next()) // { done: false, value: 1 }
console.log(await it.next()) // { done: false, value: 2 }
console.log(await it.next()) // { done: false, value: 3 }
console.log(await it.next()) // { done: true, value: undefined }

Already an iterator (probably):

const getIterator = require('get-iterator')

const input = [1, 2, 3]
let i = 0
const iterator = {
  next () {
    const value = input[i++]
    return { done: !value, value }
  }
}

const it = getIterator(iterator)
console.log(it.next()) // { done: false, value: 1 }
console.log(it.next()) // { done: false, value: 2 }
console.log(it.next()) // { done: false, value: 3 }
console.log(it.next()) // { done: true, value: undefined }

API

const getIterator = require('get-iterator')

getIterator(obj)

Get the default iterator or async iterator for an Iterable. If obj is already an iterator (i.e. has a next function) return it, since it's probably already an iterator.

This function will throw if obj is not an iterable or iterator.

Parameters

Name Type Description
obj Iterable|Iterator The object to extract the iterator from (may be an iterator already).

Returns

Type Description
Iterator The result of calling obj[Symbol.iterator]() or obj[Symbol.asyncIterator]() or simply the passed obj if it is already an iterator.

Contribute

Feel free to dive in! Open an issue or submit PRs.

License

MIT © Alan Shaw