Call an (a)sync function until an (a)sync predicate returns false.
By default the behaviour is that of a do while loop.
const createThenWhile = require('then-while')
const predicate = value => Promise.resolve(value < 0.5)
const performStep = message => Promise.resolve(`${(Math.random())}`)
const generateNumber = createThenWhile(predicate, performStep)
generateNumber('some arguments')
.then(randomNumber => console.log('random number:', randomNumber))
yarn add then-while