|
|
|
@ -7,7 +7,7 @@ function doUntil(loop, stopCondition, yieldCondition) {
|
|
|
|
|
let outerLoop = function () {
|
|
|
|
|
while (true) {
|
|
|
|
|
|
|
|
|
|
// Execute a single loop
|
|
|
|
|
// Execute a single inner loop iteration
|
|
|
|
|
loop();
|
|
|
|
|
|
|
|
|
|
if (stopCondition()) {
|
|
|
|
@ -15,17 +15,17 @@ function doUntil(loop, stopCondition, yieldCondition) {
|
|
|
|
|
resolve();
|
|
|
|
|
break;
|
|
|
|
|
} else if (yieldCondition()) {
|
|
|
|
|
// Exit loop and queue up more iterations
|
|
|
|
|
// Exit outer loop and queue up next outer loop iteration
|
|
|
|
|
// for next event cycle
|
|
|
|
|
setTimeout(outerLoop, 0);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Continue to next loop without yielding
|
|
|
|
|
// Continue to next inner loop iteration without yielding
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Start the first iteration, unless the stop condition is met
|
|
|
|
|
// Start the first iteration of outer loop, unless the stop condition is met
|
|
|
|
|
if (!stopCondition()) {
|
|
|
|
|
setTimeout(outerLoop, 0);
|
|
|
|
|
}
|
|
|
|
|