import { AsyncErrorCallback, ConditionTester, SimpleFunction } from "../interfaces"; import { once } from "../common"; /** * This method executes a loop body until the condition function returns true. */ export function loopUntil( loopBody: SimpleFunction, condition: ConditionTester, final?: AsyncErrorCallback ): void { let loop = function(): void { loopBody(once(function(err?: E): void { if (err !== null && err !== undefined) { final && final(err); } else { condition(once(function(result: boolean): void { if (result) { final && final(); } else { loop(); } })); } })); }; loop(); }