Let's start with the reactive programming part. Reactive programming is programming with asynchronous data streams. We start by defining these terms at a general level.
A stream is a sequence of ongoing events ordered in time. In reality, almost anything can be thought of as a stream, but simple examples are balls bouncing, where an event is considered every time a ball hits the floor. It can happen repeatedly many times, without specific patterns, stop for a while, then continue, and then stop again. Users clicking in a website is also a stream, where each click is an event. As you can imagine, there are streams everywhere around us.
The other term that needs to be defined is asynchronous, which literally means without syncronization. Normally, synchronous functions wait at the line of a function call until the...