Created
November 12, 2022 22:16
-
-
Save CodeZombie/5783e4040eae0753a5a871a87b3c1b35 to your computer and use it in GitHub Desktop.
Dart Rate Limiter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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