关于流式编程的一些说明,Stream API
1 | // JavaScript |
1 | Integer[] numbers = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; |
- 流式编程法,每一个单独的步骤,在内部都重新对整体数据进行一次循环,因此它要做很多次小循环,但整体的流程只走一遍。
- Rx,只在数据最源头,对整体数据进行一次循环,取出每一个单独的数据,让它去走一遍整体流程,因此,它只做一次循环,但整个的流程会走很多遍。
对于 Rx 来说,如果数据源不是固定的,那么它可以监听这个数据来源,当有数据到来时,它就可以把它发射出去把整个流程走一遍。这就是我用来理解 Rx 的观察者模式和响应式编程的方法。
Rx 比常见流式编程的抽象程度更高,它不光抽象了对数据的操作,还抽象了线程切换操作。
Rx的Promise和Observable对象:
- Promise 对象,当它被 new 出来后,其中的方法体是立即执行的,不管后面有没有用
.then()
加上回调,执行的结果被存储在对象之中,如果后面再用.then()
加上回调,之前的结果会马上传递给新的回调。 - Rx 的 Observable 对象,当它被 new 出来后,其中的方法体,只有
.subscribe()
方法被执行的那一刻才会执行,否则,只要没有调用.subscribe()
,其中的变换就永远不会执行,这和 Promise 是完全不一样的。
只要是 T -> Observable 的变换,就应该用 flatMap