デモ:
スニペット
/**
* Repeat setTimeout until callback returns truthy.
* @param {Function} callback
* @param {Number} interval
*/
function waitFor(callback, interval) {
var f = function() {
if (!callback()) {
setTimeout(f, interval);
}
};
f();
}
例
var threshold = 1000;
var startedAt = Date.now();
waitFor(function() {
var past = Date.now() - startedAt;
if (past > threshold) {
console.log('done.');
return true;
}
else {
console.log('progressing…', past);
}
}, 100);