所以在我们的角度,我们是被动的,也就是英语中的reactive ,也就是所谓的响应式
我们回到我们的例子:
同步的时候,我们是这样的
interface Model{
fun getList() : List
fun getBitmap(metaData : MetaData) : Bitmap
}
而异步的时候,我们的方法没有了返回值,多了个参数,所以不能使用漂亮的**“链式调用”。 这是因为List 本身,就是一种同步的类型。我们每次操作List,都是对List来拉取**数据。不信?我们来看下:
大家都知道List并不是最基础的集合,常用的集合还有HashMap,Set,Table,Vector等等等等。他们都有一个共同的父类: Iterable
interface Iterable {
fun iterator(): Iterator
}
这里的iterator就是迭代器,他是这个样子的
interface Iterator {
fun next(): T
fun hasNext(): Boolean
}
使用的时候也就是我们最麻烦的迭代方式:
val i = iterator()
while(i.hasNext()){
val value = i.next()
}
所以我们在Java中有了foreach,以及后面的stream api等等语法糖。 这里我们看到了,我们每次确实首先询问List,有没有值,如果有我们获取这个值,如果没有,跳出循环,对List的操作结束。读取完毕。
想象一下,如果我们有一种 AsyncList
,对他的读取都是AsyncList
来通知我们,然后再和同步的时候一样使用高阶函数比如map/foreach等等该多好。比如
interface Model{
fun getList() : AsyncL