Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/composer / src / webpack / forEachBail.ts
Size: Mime:
export function forEachBail(array, iterator, callback) {
  if (array.length === 0) return callback()
  let currentPos = array.length
  let currentResult
  let done = []
  for (let i = 0; i < array.length; i++) {
    const itCb = createIteratorCallback(i)
    iterator(array[i], itCb)
    if (currentPos === 0) break
  }

  function createIteratorCallback(i) {
    return (...args) => {
      // eslint-disable-line
      if (i >= currentPos) return // ignore
      done.push(i)
      if (args.length > 0) {
        currentPos = i + 1
        done = done.filter(item => {
          return item <= i
        })
        currentResult = args
      }
      if (done.length === currentPos) {
        callback(...currentResult)
        currentPos = 0
      }
    }
  }
}

export { forEachBailWithIndex as withIndex }
export function forEachBailWithIndex(array, iterator, callback) {
  if (array.length === 0) return callback()
  let currentPos = array.length
  let currentResult
  let done = []
  for (let i = 0; i < array.length; i++) {
    const itCb = createIteratorCallback(i)
    iterator(array[i], i, itCb)
    if (currentPos === 0) break
  }

  function createIteratorCallback(i) {
    return (...args) => {
      // eslint-disable-line
      if (i >= currentPos) return // ignore

      done.push(i)

      if (args.length > 0) {
        currentPos = i + 1
        done = done.filter(item => {
          return item <= i
        })
        currentResult = args
      }
      if (done.length === currentPos) {
        callback(...currentResult)
        currentPos = 0
      }
    }
  }
}