'use strict'; const { EachLimit } = require('./eachLimit'); const { setLimit } = require('./internal/collection'); class FindKeyLimit extends EachLimit { constructor(collection, limit, iterator) { super(collection, limit, iterator, set); } } module.exports = { findKeyLimit, FindKeyLimit }; function set(collection) { setLimit.call(this, collection); this._callResolve = this._keys === undefined ? callResolveArray : callResolveObject; return this; } function callResolveArray(value, index) { if (value) { this._callRest = 0; this._promise._resolve(`${index}`); } else if (--this._rest === 0) { this._promise._resolve(); } else if (this._callRest-- > 0) { this._iterate(); } } function callResolveObject(value, index) { if (value) { this._callRest = 0; this._promise._resolve(this._keys[index]); } else if (--this._rest === 0) { this._promise._resolve(); } else if (this._callRest-- > 0) { this._iterate(); } } /** * @param {Array|Object} collection * @param {integer} [limit=8] * @param {Function} iterator * @return {Aigle} Returns an Aigle instance */ function findKeyLimit(collection, limit, iterator) { return new FindKeyLimit(collection, limit, iterator)._execute(); }