Creates a stream with values from streams lined up with each other. For example if you have two streams with values [1, 2, 3] and [4, 5, 6, 7], the result stream will emit [1, 4], [2, 5], and [3, 6]. The result stream will emit the next value only when it has at least one value from each source.
const s1 = flydconst s2 = flydconst zipped = // [1, 2] // [1, 2] -- s1 still has old value so zipped does not change // [4, 3]
Zip is not like lift, because lift will give you a pair for every new value:
const s1 = flydconst s2 = flydconst lifted = // [1,2] // [1,3]
Lift will give you a pair for any new value on any new stream. Instead, zip gives you only pairs of new values, where both values have to be new to produce a new pair on the zipped stream.