Such prompts for further thought are not analogies. When we think in terms of analogies, we get stuck on the differences, and those sticking points then becomes an excuse not to think historically at all.
a) add the async keyword to the main() function. b) add the await keyword in front of the future object. Result: Once Dart encounters the await keyword, it sends all the code starting from that line to the event queue and waits for the future to complete. That’s why you see the number 2 before 3.