Dart的异步操作

Dart

实现异步有两种方法:
1:使用async和await
2:使用Future API

一个方法被async标记后,则他的返回值类型为Future:
例如:

//这个是同步的
String lookUpVersionSync() => '1.0.0';
//这个是异步的
Future<String> lookUpVersion() async => '1.0.0';

当时由于不知道async返回值是Future导致我下面得程序一直不知道哪里错了~
返回值写成String程序报错,因为async返回的类型是Future,所以我应该将返回类型改成Future
错误的正确的

1.Async的使用:

import 'dart:async';
void main(){
  printDatilNewsDigest();
  printWinningLotteryNumbers();
  printWeatherForecast();
  printBaseballScore();
  new Future(()=>printWinningLotteryNumbers());
}
Future<void> printDatilNewsDigest() async{
  var newsDigest = await gatherNewsReports();
  print(newsDigest);
}

const news = '<gathered news goes here>'; //const等于final
const oneSecond = Duration(seconds: 1);

Future<String> gatherNewsReports(){
  return Future.delayed(oneSecond,()=>news);
}

printWinningLotteryNumbers() {
  print('Winning lotto numbers: [23, 63, 87, 26, 2]');
}

printWeatherForecast() {
  print("Tomorrow's forecast: 70F, sunny.");
}

printBaseballScore() {
  print('Baseball score: Red Sox 10, Yankees 0');
}

2.Future的使用

void main() {
  new Future(() => futureTask()) //  异步任务的函数
      .then((m) => ds("$m")) //   任务执行完后的子任务
      .then((m) => m.length) //  其中m为上个任务执行完后的返回的结果
      .then((m) => printLength(m))
      .whenComplete(() => whenTaskCompelete); //  当所有任务完成后的回调函数
}

double futureTask() {
  return 2.2;
}

String ds(String ds) {
  print(ds);
  return ds;
}

void printLength(int length) {
  print("Text Length:$length");
}

void whenTaskCompelete() {
  print("Task Complete");
}

3.用两种方法描述同一个方法

Future<void> printWithDelay(String message) async {
  await Future.delayed(const Duration(seconds: 1));
  print(message);
}

Future<void> printWith(String message) {
  return Future.delayed(const Duration(seconds: 1)).then((_) => print(message));
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值