Deferrdはまだ見てないんだけど、適当に作ってみた。 function execWhen(cond, proc, opt) { var opt = opt ? opt: {} var limit = opt.limit || 10000 var interval = opt.interval || 500 var current = 0 var timer = null intervalProc() function intervalProc() { if (cond()) { proc() clearTimeout(timer) } else if (current < limit) { timer = setTimeout(intervalProc, interval) current += interval } else { clearTimeout(timer) throw n