LookAtMySuitBot/js/node_modules/macaddress/lib/util.js

85 lines
2.0 KiB
JavaScript
Raw Normal View History

2023-12-24 20:08:39 -05:00
/* jshint node: true */
"use strict";
var lib = {};
var nextTick = process.nextTick || global.setImmediate || global.setTimeout;
lib.nextTick = function (func) {
nextTick(func);
};
lib.parallel = function (tasks, done) {
var results = [];
var errs = [];
var length = 0;
var doneLength = 0;
function doneIt(ix, err, result) {
if (err) {
errs[ix] = err;
} else {
results[ix] = result;
}
doneLength += 1;
if (doneLength >= length) {
done(errs.length > 0 ? errs : errs, results);
}
}
Object.keys(tasks).forEach(function (key) {
length += 1;
var task = tasks[key];
lib.nextTick(function () {
task(doneIt.bind(null, key), 1);
});
});
};
lib.promisify = function (func) {
return new Promise(function (resolve, reject) {
func(function (err, data) {
if (err) {
if (!err instanceof Error) {
err = new Error(err);
}
reject(err);
return;
}
resolve(data);
});
});
};
lib.iterate = function (args, func, callback) {
var errors = [];
var f = function () {
if (args.length === 0) {
lib.nextTick(callback.bind(null, errors));
return;
}
var arg = args.shift();
if (typeof arg === "function") {
arg(function (err, res) {
if (err) {
errors.push(err);
} else {
while (res.length > 0) {
args.unshift(res.pop());
}
}
f();
});
return;
}
func(arg, function (err, res) {
if (err) {
errors.push(err);
f();
} else {
lib.nextTick(callback.bind(null, null, res));
}
});
};
lib.nextTick(f);
};
module.exports = lib;