Dart异步编程问题:调用async函数输出Future实例而非预期结果
问题原因
createOrderMessage是被async修饰的异步函数,这类函数的返回值会被自动包装成Future对象。你直接调用print(createOrderMessage()),本质是在打印这个Future实例,而非等待异步操作完成后拿到的字符串结果,所以会输出Instance of '_Future'。
解决方法
有两种常见方式可以正确获取并打印异步函数的返回值:
方法1:将main函数改为async,用await等待结果
Dart允许将main函数标记为async,这样就能在内部使用await等待异步操作完成:
Future<String> createOrderMessage() async{ var order = await fetchUserOrder(); return 'Your order is: $order'; } Future<String> fetchUserOrder() => Future.delayed( const Duration(seconds: 2), () => 'Large Latte', ); void main() async { print(await createOrderMessage()); }
方法2:使用Future的then方法处理回调
通过then方法注册回调函数,当Future执行完成时,会将结果传入回调进行处理:
Future<String> createOrderMessage() async{ var order = await fetchUserOrder(); return 'Your order is: $order'; } Future<String> fetchUserOrder() => Future.delayed( const Duration(seconds: 2), () => 'Large Latte', ); void main() { createOrderMessage().then((message) => print(message)); }
两种方法都能让你得到预期输出:Your order is: Large Latte。
内容的提问来源于stack exchange,提问作者Berke
相关产品推荐
相关产品推荐

