美文网首页
Flutter之Dart异步实现

Flutter之Dart异步实现

作者: xulj100 | 来源:发表于2020-04-14 10:16 被阅读0次

1、Dart是单线程模型

Dart是单线程的,那么如何实现耗时操作呢?
Dart是基于单线程加事件循环来完成耗时操作的处理。

2、Dart事件循环

事件循环是什么呢?

  • 事实上事件循环并不复杂,它就是将需要处理的一系列事件(包括点击事件、IO事件、网络事件)放在一个事件队列(Event Queue)中。
  • 不断的从事件队列(Event Queue)中取出事件,并执行其对应需要执行的代码块,直到事件队列清空。 image.png

3、Dart的异步操作

  • 使用Future实现异步
import 'dart:io';
main(List<String> args) {

  print("----- start ------");

  //getData();

  getNetData().then((value){
    print(value);
  });

  print("----- end   ------");
}

//耗时操作,等待3秒
String getData(){
  sleep(Duration(seconds: 3));
  return "----- 返回数据 ----";
}

//异步操作
Future<String> getNetData() {
  return Future<String>(() {
    sleep(Duration(seconds: 3));
    return "----- 异步返回数据 ----";
  });
}

查看控制台输出,返回数据方法并没有被等待,而是最后返回。

----- start ------
----- end   ------
----- 异步返回数据 ----

Future的其他用法:

import 'dart:io';

main(List<String> args) {
  print("----- start ------");

  //getData();

  getNetData().then((value) {
    print(value);
  });

  //链式调用
  getNetData().then((value1) {
    print(value1);
    return "----- second data ------";
  }).then((value2) {
    print(value2);
    return "----- third data ------";
  }).then((value3) {
    print(value3);
  });


  Future.value("----- hello future").then((value){
    print(value);
  });

  getErrorData().then((value) {
    print(value);
  }).catchError((error) {
    print(error);
  });


  getNetworkData().then((value){
    print(value);
  });

  print("----- end   ------");
}

//耗时操作,等待3秒
String getData() {
  sleep(Duration(seconds: 3));
  return "----- 返回数据 ----";
}

//异步操作
Future<String> getNetData() {
  return Future<String>(() {
    sleep(Duration(seconds: 3));
    return "----- 异步返回数据 ----";
  });
}

//抛出异常
Future<String> getErrorData() {
  return Future<String>(() {
    sleep(Duration(seconds: 3));
    throw Exception("网络请求出现错误");
  });
}

//使用 await+async 实现异步,返回的是Future类型
Future<String> getNetworkData() async {
  var result = await Future.delayed(Duration(seconds: 3), () {
    return "network data";
  });

  return "----- " + result;
}

控制台输出:

----- start ------
----- end   ------
----- hello future
----- 异步返回数据 ----
----- 异步返回数据 ----
----- second data ------
----- third data ------
Exception: 网络请求出现错误
----- network data
  • 使用await、async实现异步
//使用 await+async 实现异步,返回的是Future类型
Future<String> getNetworkData() async {
  var result = await Future.delayed(Duration(seconds: 3), () {
    return "network data";
  });
  return "----- " + result;
}

相关文章

  • 2019-09-23: 十一:Flutter之Dart异步操作?

    十一:Flutter之Dart异步操作? 1: Dart 的异步模型?我们先搞清楚dart是如何搞定异步操作的?1...

  • Flutter之Dart异步实现

    1、Dart是单线程模型 Dart是单线程的,那么如何实现耗时操作呢?Dart是基于单线程加事件循环来完成耗时操作...

  • flutter之---Future的正确用法

    在flutter中经常会用到异步任务,dart中异步任务异步处理是用Future来处理,那么如何实现用Future...

  • flutter Future

    在flutter中经常会用到异步任务,dart中异步任务异步处理是用Future来处理,那么如何实现用Future...

  • Flutter - Framework

    线程模型 Flutter是运行Engine上来实现跨平台的,Dart支持通过isolate实现异步处理的逻辑。但是...

  • Flutter异步编程详解

    不知道大家有没有一个疑问:Dart是单线程执行,那它是如何实现异步操作的呢? 本文将对Dart/Flutter提供...

  • @@@@@@@@

    \009-享学课堂安卓架构第一期├01 flutter│ ├Dart异步编程(1)-.mp4│ ├Dart异步...

  • Flutter 知识篇

    Flutter篇之你真的会使用Future吗 Dart 异步编程和原理 状态管理拓展篇——RxDart(四) Fl...

  • Flutter整体架构

    Flutter架构 Flutter Framework,该层是Dart库,google实现一套用Dart语言开发的...

  • 深入理解Flutter/Dart事件机制

    前言 在前文《Flutter/Dart中的异步》[https://juejin.cn/post/684490376...

网友评论

      本文标题:Flutter之Dart异步实现

      本文链接:https://www.haomeiwen.com/subject/bjnamhtx.html