I think all this logic can be done once up front to schedule the intial timer, which on expiration then just schedules a repeating timer of `intervalMs` duration.