By now, you probably realize that in order to do async programming in Dart, you must work with futures. So, it would be good to know your way around that class. Let’s take some scenarios and show how the Future
class in Dart handles them:
To iterate a set of async calls, use Future.forEach
. In the example below, we create a method to check if a number is prime or not. Since we wrap our result coming from isPrimeNumber
in a Future
, we are able to await the results and invoke them so that we can perform an operation of our choosing against that result (in our case, we just print out for the result).
import 'dart:async';import 'dart:math';Future<bool> isPrimeNumber(int number) async {if (number == 1) return false;if (number == 2) return true;double mysqrt = sqrt(number);int limit = mysqrt.ceil();for (int i = 2; i <= limit; ++i) {if (number % i == 0) return false;}return true;}void main() async {await Future.forEach([1,2,3,4,5,6,7,8,9,10], (int n) =>isPrimeNumber(n).then((x) => print("${n}${x ? " is" : " is not"} a prime number")));print('done!');}
Dart makes handling errors within asynchronous code easy because it utilizes something you are most likely already very familiar with, try-catch blocks. If the code within a try
block throws an exception, you are going to be able to handle it in the catch
block.
In the example below, we intentionally throw an exception in the openFile
function, just to see how it works. If you run this, you would see that the “success!” message is never printed and that, instead, we see a message concerning the exception that was thrown.
import 'dart:async';Future<void> openFile(String fileName) async {throw new Exception("boom!");}void main() async {try{var result = await openFile("theFile");print("success!");}catch(e) {print("Looks like we caught an error: ${e.toString()}");}}
Combined with the Future
class, the async
/await
pattern in Dart is a powerful and expressive way of doing asynchronous programming. This is good news because, as you get into building web applications or Flutter, you are going to really need to grasp the fundamentals of asynchronous coding.