pedding
Version:
Just pending for callback.
50 lines • 3.06 kB
JavaScript
export class ExecuteTooManyTimesError extends Error {
expected;
actual;
constructor(expected, actual) {
super(`Expected to execute ${expected} times, but got ${actual} times`);
this.expected = expected;
this.actual = actual;
this.name = this.constructor.name;
Error.captureStackTrace(this, this.constructor);
}
}
export function pending(n, fn) {
let _fn;
if (typeof n === 'function') {
// keep compatibility for old version
// pending(fn, n)
_fn = n;
n = fn;
}
else {
_fn = fn;
}
let called = false;
let times = 0;
const callStack = new Error();
callStack.name = 'CallStack';
return (err) => {
if (called) {
return;
}
if (err) {
called = true;
return _fn(err);
}
times++;
if (times === n) {
_fn();
}
else if (times > n) {
const err = new ExecuteTooManyTimesError(n, times);
err.stack += '\n' + callStack.stack;
throw err;
}
};
}
/**
* @deprecated Use `pending` instead
*/
export const pedding = pending;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLHdCQUF5QixTQUFRLEtBQUs7SUFDakQsUUFBUSxDQUFTO0lBQ2pCLE1BQU0sQ0FBUztJQUVmLFlBQVksUUFBZ0IsRUFBRSxNQUFjO1FBQzFDLEtBQUssQ0FBQyx1QkFBdUIsUUFBUSxtQkFBbUIsTUFBTSxRQUFRLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQUlELE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBb0IsRUFBRSxFQUFxQjtJQUNqRSxJQUFJLEdBQWEsQ0FBQztJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzVCLHFDQUFxQztRQUNyQyxpQkFBaUI7UUFDakIsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxFQUFZLENBQUM7SUFDbkIsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUM5QixTQUFTLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUM3QixPQUFPLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDckIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDZCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQixHQUFHLEVBQUUsQ0FBQztRQUNSLENBQUM7YUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLHdCQUF3QixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMifQ==