响应式编程 (Reactive Programming)

functional reactive programming (FRP)

  • 以响应式编程的方式思考, 放弃命令式且带状态的编程习惯,并且要强迫你的大脑以一种不同的方式去工作

wikipedia: Reactive programming
Stack-overflow: What is (functional) reactive programming?
The Reactive Manifesto

  • 响应式编程是使用异步数据流进行编程
    Event buses 或者 Click events 本质上就是异步事件流

  • 响应式编程的思路大概:可以用包括 Click 和 Hover 事件在内的任何东西创建 Data stream。Stream 廉价且常见,任何东西都可以是一个 Stream:变量、用户输入、属性、Cache、数据结构等等

  • 可以用函数去组合、创建、过滤这些 Streams, Stream 能接受一个,甚至多个 Stream 为输入,你可以融合两个 Stream,也可以从一个 Stream 中过滤出你感兴趣的 Events 以生成一个新的 Stream,还可以把一个 Stream 中的数据值 映射到一个新的 Stream 中

Stream 就是一个按时间排序的 Events 序列,它可以放射三种不同的 Events:

  • (某种类型的)Value
  • Error
  • Completed

监听一个 Stream 也被称作是订阅 ,而我们所定义的函数就是观察者,Stream则是被观察者,其实就是 Observer Design Pattern。

1
2
3
4
5
6
--a---b-c---d---X---|->

a, b, c, d are emitted values
X is an error
| is the 'completed' signal
---> is the timeline