# doUntil
> Invoke a function until a test condition is true.
## Usage
```javascript
var doUntil = require( '@stdlib/utils/do-until' );
```
#### doUntil( fcn, predicate\[, thisArg ] )
Invokes a `function` until a `predicate` function returns `true`. Note that the `predicate` function is evaluated **after** executing `fcn`; thus, `fcn` **always** executes at least once.
```javascript
function predicate( i ) {
return ( i >= 5 );
}
function beep( i ) {
console.log( 'boop: %d', i );
}
doUntil( beep, predicate );
/* =>
boop: 0
boop: 1
boop: 2
boop: 3
boop: 4
*/
```
Both the `predicate` function and the `function` to invoke are provided a single argument:
- `i`: iteration number (starting from zero)
To set the function execution context for the invoked function, provide a `thisArg`.
```javascript
function predicate( i ) {
return ( i >= 5 );
}
function count() {
this.count += 1;
}
var context = {
'count': 0
};
doUntil( count, predicate, context );
console.log( context.count );
// => 5
```
## Examples
```javascript
var randu = require( '@stdlib/random/base/randu' );
var doUntil = require( '@stdlib/utils/do-until' );
function predicate() {
return ( randu() <= 0.05 );
}
function log( i ) {
console.log( i );
}
doUntil( log, predicate );
```