refactor to invalidate timer after succ/fail callbacks