Returning a String from an async

user3329151 picture user3329151 · Nov 24, 2015 · Viewed 8.5k times · Source

I want to return a String from an async function but I get a Future What am I doing wrong;

Example

main() {
  String s;
  s = dummy("http://www.google.com");
}

String dummy(String s) {
  String response;
  response = readURL(s);
  return response;
}


Future<String> readURL(String requestString) async {
  String response = await http.read(requestString);
  print(response);
  return response;

}

Error:

type '_Future' is not a subtype of type 'String' of 'response'.

Answer

Pacane picture Pacane · Nov 25, 2015

A function that's annotated with async will always return a Future.

so when you call readUrl(s) you can await its result.

To use await, the caller (here your main function) has to be marked as async. So the end result could look like this:

main() async {
  String s = await dummy("http://www.google.com");
}

Future<String> dummy(String s) async {
  String response = await readURL(s);
  return (response);
}

Future<String> readURL(String requestString) async {
  String response = await http.read(requestString);
  print(response);
  return(response);
}

The thing to notice here: If you use await in a function, it is now considered as function that returns a Future. So every function you convert to be async will now return a Future.