资讯专栏INFORMATION COLUMN

dart系列之:在dart中使用生成器

yck / 2217人阅读

摘要:同步的使用关键词如下异步的使用的是关键词如下生成关键词使用的是。从中取出数据有两种方式,第一种就是使用本身的来获取中的数据。并且必须用在中,如下如果要想中断对的监听,则可以使用或者。总结总结以上就是中生成器的使用了。

简介

ES6中在引入异步编程的同时,也引入了Generators,通过yield关键词来生成对应的数据。同样的dart也有yield关键词和生成器的概念。

什么时候生成器呢?所谓生成器就是一个能够持续产生某些数据的装置,也叫做generator。

两种返回类型的generator

根据是同步生成还是异步生成,dart返回的结果也是不同的。

如果是同步返回,那么返回的是一个Iterable对象.

如果是异步返回,那么返回的是一个Stream对象。

同步的generator使用sync*关键词如下:

Iterable naturalsTo(int n) sync* {  int k = 0;  while (k < n) yield k++;}

异步的generator使用的是async* 关键词如下:

Stream asynchronousNaturalsTo(int n) async* {  int k = 0;  while (k < n) yield k++;}

生成关键词使用的是yield。

如果yield后面跟着的本身就是一个generator,那么需要使用yield*。

Iterable naturalsDownFrom(int n) sync* {  if (n > 0) {    yield n;    yield* naturalsDownFrom(n - 1);  }}

Stream的操作

stream表示的是流,得到这个流之后,我们需要从流中取出对应的数据。

从Stream中取出数据有两种方式,第一种就是使用Stream本身的API来获取Stream中的数据。

最简单的就是调用stream的listen方法:

  StreamSubscription listen(void onData(T event)?,      {Function? onError, void onDone()?, bool? cancelOnError});

listen可以接数据的处理方法,具体使用如下:

 final startingDir = Directory(searchPath);      startingDir.list().listen((entity) {        if (entity is File) {          searchFile(entity, searchTerms);        }      });

默认的方法是onData方法。

另外一种就是今天要讲解的await for.

await for的语法如下:

await for (varOrType identifier in expression) {  // Executes each time the stream emits a value.}

要注意的是上面的expression必须是一个Stream对象。并且await for必须用在async中,如下:

Future main() async {  // ...  await for (final request in requestServer) {    handleRequest(request);  }  // ...}

如果要想中断对stream的监听,则可以使用break或者return。

总结

以上就是dart中生成器的使用了。

本文已收录于 http://www.flydean.com/13-dart-generators/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124541.html

相关文章

  • dart系列:dart使用数字和字符串

    摘要:数字中定义了三种类型的数字,分别是和。对于小数来说,可以使用来指定小数的位数如果要使用科学记数法的话,可以使用字符串所有的字符串在中都是以进行编码的,中的定义了很多常用的并且非常有用的方法。总结以上就是中数字和字符串的介绍。目录简介数字字符串StringBuffer总结简介要想熟悉一种语言,最简单的做法就是熟悉dart提供的各种核心库。dart为我们提供了包括dart:core,dart:a...

    番茄西红柿 评论0 收藏2637
  • dart系列:元世界pubspec.yaml文件详解

    摘要:有两种依赖信息,一种是所有使用到这个的人都需要用到的依赖,这种依赖放在中。还有一种是只用在当前开发中的包,这种依赖放在中。在某些情况下,我们有可能需要覆盖某些依赖包,则可以放在中。从之后,中还支持指定的版本总结总结以上就是的元世界详解。  目录 简介 pubspec.yaml支持的字段 一个例子 字段详情 总结   简介 pub...

    vibiu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<