0%

rxjs-pull-push

介绍

Pull和Push是两种数据流的传递方式,他们决定了数据如何从生产者传递到消费者。

Pull

Pull是拉模型,也就是消费者主动向生产者请求数据,消费者是主动的一方。在JavaScript中,所有的函数都是Pull模型的,函数相当于数据的生产者,函数调用者相当于数据的消费者。调用这个函数,就是在请求数据。

下面的代码中num.reduce函数用来求数组的和,const sum = nums.reduce(...)调用函数请求数据。

1
2
3
const nums = [1, 2, 3, 4, 5];
const sum = nums.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 15

Push

Push是推模型,由数据的生产者主动向外推送数据,生产者是主动的一方。在JavaScript中,Promise就是Push模型的,与函数不同,Promise决定什么时候发送数据。

下面代码中的p.then(console)会在Promise resolve之后执行,Promise决定了何时发送数据。

1
2
3
4
5
6
const p = new Promise((resolve) => {
setTimeout(() => {
resolve(42);
}, 1000);
});
p.then(console.log); // 42

RxJS中的Observable也是推模型的,Observable决定了何时发送数据。

References

  1. https://rxjs.dev/guide/observable