Dart基础第十五篇:Dart之async和await

本文介绍Dart语言中async和await关键字的使用,通过一个从Huobi获取市场概览数据的例子,展示了如何创建异步方法并使用await等待其执行完成。这涉及到HttpClient的使用,以及如何处理HTTP响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import 'dart:io';
import 'dart:convert';


/**
 *   async和await:
 *    这两个关键字的使用只需要记住两点:
 *       只有async方法才能使用await关键字调用方法
 *       如果调用别的async方法必须使用await关键字
 *       async是让方法变成异步。
 *        await是等待异步方法执行完成。
 */
getDataFromBTC() async{
  var httpClient = new HttpClient();
  //https://www.huobi.br.com/-/x/pro/market/overview5
  var uri = Uri.http("www.huobi.br.com", "/-/x/pro/market/overview5");
  print(uri);
  var request = await httpClient.getUrl(uri);
  var response = await request.close();
  return await response.transform(utf8.decoder).join();
}


void main()async{
  var btc = await getDataFromBTC();
  print(btc);
}

 

### Dart 中 `async` `await` 的使用 在 Dart 编程语言中,`async` `await` 关键字用于处理异步操作。通过这些关键字可以使代码更简洁易读。 #### 基本概念 - **`async`**: 当一个函数被标记为 `async` 后,在该函数体内可以使用 `await` 来暂停当前执行直到某个异步操作完成[^1]。 - **`await`**: 此关键字只能出现在带有 `async` 标记的方法内,它使得程序能够等待一个 Future 对象的结果而不会阻塞整个应用程序线程[^2]。 #### 示例代码展示 下面是一个简单的例子来说明如何利用 `async` `await` 实现多个异步任务按序执行: ```dart import 'dart:async'; void main() { getName1(); } // 定义了一个异步方法 getName1() async { String result1 = await getStr1(); // 等待getStr1()返回结果 print(result1); // 输出result1 String result2 = await getStr2(); // 继续等待getStr2()返回结果 print(result2); // 输出result2 print('getName1'); } Future<String> getStr1() async { await Future.delayed(Duration(seconds: 1)); // 模拟耗时操作 return "这是来自getStr1的消息"; } Future<String> getStr2() async { await Future.delayed(Duration(seconds: 2)); // 模拟另一个耗时较长的操作 return "这是来自getStr2的消息"; } ``` 在这个案例里,当调用 `getName1()` 方法时,会依次打印出由两个模拟网络请求或其他长时间运行的任务所获取的信息,并最终显示 `'getName1'` 字符串[^3]。 #### 注意事项 - 如果在一个同步函数中尝试使用 `await` 将会导致编译错误;因此务必确保任何含有 `await` 表达式的上下文都已经被声明成 `async` 函数。 - 即使存在多处 `await` 调用,它们也会按照书写顺序逐一被执行完毕后再继续后续逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值