Skip to content

Instantly share code, notes, and snippets.

@CodeZombie
Created November 12, 2022 22:16
Show Gist options
  • Save CodeZombie/5783e4040eae0753a5a871a87b3c1b35 to your computer and use it in GitHub Desktop.
Save CodeZombie/5783e4040eae0753a5a871a87b3c1b35 to your computer and use it in GitHub Desktop.
Dart Rate Limiter
class RateLimiter {
late int waitTimeMilliseconds = 2500;
DateTime lastActionTime = DateTime.now();
Future<Function> doAction(Function f) async {
while (true) {
if (DateTime.now().isAfter(lastActionTime.add(Duration(milliseconds: waitTimeMilliseconds)))) {
break;
} else {
await Future.delayed(const Duration(milliseconds: 100));
}
}
lastActionTime = DateTime.now();
return f;
}
}
void printName(String name) {
print("Hello, $name");
}
void main() async {
RateLimiter rateLimiter = RateLimiter();
print("1");
(rateLimiter.doAction(() => printName("Jeremy"))).then((f) => f());
//(await rateLimiter.doAction(() => printName("Jeremy")))();
print("2");
//(await rateLimiter.doAction(() => printName("Frank")))();
(rateLimiter.doAction(() => printName("Frank"))).then((f) => f());
print("3");
//(await rateLimiter.doAction(() => printName("Bill")))();
(rateLimiter.doAction(() => printName("Bill"))).then((f) => f());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment