「google教程」async/await的使用和原理( 二 )


如何处理循环
如我们普通的循环写法 。用for来循环迭代值
int getTotal(List<int> numbers){ int total = 0; for(final value in numbers){ total +=value; } return total;}复制代码但是如果我们这个函数读取的是一个由数字组成的stream,该怎么办,按照他们的异步到达的次序来进行求和,然后返回求和值,和aync awaite的方式一样,不用改变代码基本结构 。
首先,先将函数标志位async
然后,将返回值更改为future
然后,在前面添加关键字await 。完成 。代码如下:
Future<int> getTotal(List<int> numbers) async{ int total = 0; await for(final value in numbers){ total +=value; } return total;}复制代码和future一样,await关键字将我的函数,拆分为等待事件之前执行和之后执行,两部分代码,首先,他开始执行,一直到await,然后将其future返回给调用函数,并等待一段数据到达 。当数据到达时,循环执行一次来处理那条数据,然后停下来,并等待下一条数据,也许此时应用程序会运行并执行其他一些操作,如垃圾回收,最终另一条数据到来了,然后循环再次执行,这种情况一直循环,直到stream结束并关闭,此时该函数退出循环,并执行其return语句 。这样就完成了getTotal在最初返回给它的调用者的feture 。
有一点要注意的是,当你使用stream时,保证要处理的streams最终会完成 。如果遇到如html查找一个按钮点击,这个按钮一直没出来就无法完成,则函数会一直等待的状态 。
参考
Get started with Flutter → flutter.dev Try a Flutter codelab → goo.gl/d3fHPo Join the conversation → goo.gl/68oUnb




推荐阅读