Repository URL to install this package:
|
Version:
1.4.0 ▾
|
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
}
}
}
}