Dart

关注公众号 jb51net

关闭
首页 > 网络编程 > Dart > Dart 异步处理

浅析Dart语言的异步处理

作者:97令山

Dart是一个单线程语言,我们在处理耗时操作的时候使用stream或者future来实现,在这篇文章中我们将简单的给大家聊一聊Dart语言的异步处理

何为异步支持

了解一下异步线程

Dart中支持异步编程的方式

使用 async 和 await 进行异步处理

  /*返回值为Future<String>类型,即其返回值未来是一个String类型的值*/
  /*async关键字声明该函数内部有代码需要延迟执行*/
  getData() async {    
    /*await关键字声明运算为延迟执行,然后return运算结果*/
    return await "This is a doubi"; 
  }
String data = getData();

Future是什么

Future示例

  void doAsyncs() async{
    //then catchError whenComplete
    new Future(() => futureTask()) //  异步任务的函数
        .then((m) => "1-:$m") //   任务执行完后的子任务
        .then((m) => print('2-$m')) //  其中m为上个任务执行完后的返回的结果
        .then((_) => new Future.error('3-:error'))
        .then((m) => print('4-'))
        .whenComplete(() => print('5-')) //不是最后执行whenComplete,通常放到最后回调
        .catchError((e) => print('6-catchError:' + e), test: (Object o) {
      print('7-:' + o);
      return true; //返回true,会被catchError捕获
    })
        .then((_) => new Future.error('11-:error'))
        .then((m) => print('10-'))
        .catchError((e) => print('8-:' + e))
    ;
  }
  futureTask() {
    return Future.delayed(Duration(seconds: 5),()  => "9-走去跑步");
  }

I/flutter: 2-1-:9-走去跑步
I/flutter: 5-
I/flutter: 7-:3-:error
I/flutter: 6-catchError:3-:error
I/flutter: 8-:11-:error

介绍一下Async/await

async/await消除callback hell

task() async {
   try{
    String id = await login("alice","******");
    String userInfo = await getUserInfo(id);
    await saveUserInfo(userInfo);
    //执行接下来的操作   
   } catch(e){
    //错误处理   
    print(e);   
   }  
}

Stream是什么

Stream应用示例

Stream.fromFutures([
  // 1秒后返回结果
  Future.delayed(new Duration(seconds: 1), () {
    return "hello 1";
  }),
  // 抛出一个异常
  Future.delayed(new Duration(seconds: 2),(){
    throw AssertionError("Error");
  }),
  // 3秒后返回结果
  Future.delayed(new Duration(seconds: 3), () {
    return "hello 3";
  })
]).listen((data){
   print(data);
}, onError: (e){
   print(e.message);
},onDone: (){
   print("完成");
});

I/flutter (17666): hello 1
I/flutter (17666): Error
I/flutter (17666): hello 3

到此这篇关于浅析Dart语言的异步处理的文章就介绍到这了,更多相关Dart 异步处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文