@kitmi/utils
Version:
A JavaScript utility library for both server and browser
52 lines (51 loc) • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _isPlainObject = /*#__PURE__*/ _interop_require_default(require("./isPlainObject"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
/**
* Walk through each entry of an array of an object parallelly, faster than eachAsync_
* @alias collection.batchAsync_
* @async
* @param {Array|Object} obj
* @param {asyncIterator} iterator
* @returns {Promise.<Array|Object>}
*/ async function batchAsync_(obj, iterator) {
if (Array.isArray(obj)) {
const r = [];
let l = obj.length;
for(let i = 0; i < l; i++){
r.push(iterator(obj[i], i, obj));
}
return Promise.all(r);
}
if ((0, _isPlainObject.default)(obj)) {
const keys = [];
const values = [];
for(let k in obj){
if (Object.prototype.hasOwnProperty.call(obj, k)) {
keys.push(k);
values.push(iterator(obj[k], k, obj));
}
}
const result = await Promise.all(values);
return keys.reduce((r, k, i)=>{
r[k] = result[i];
return r;
}, {});
}
throw new Error('Invalid argument!');
}
const _default = batchAsync_;
//# sourceMappingURL=batchAsync_.js.map