以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
72. 实现Observable interval()

解题思路:

题目要求我们实现一个 creation operator interval(),它会创建一个 Observable,每隔一定时间就会产生一个新的 value,然后把这个 value 发射给 Subscriber。

为了实现这个 operator,我们可以利用 Observable.create() 来创建一个 Observable,然后再利用 setInterval() 来定时产生 value。

具体实现:

function interval(period) {  return Observable.create(function(observer) {    let n = 0;    const intervalId = setInterval(() => {      observer.next(n++);    }, period);    return function() {      clearInterval(intervalId);    }  });}

我们通过 Observable.create() 创建一个 Observable,传入一个函数,这个函数会接收一个 observer 参数。

然后,我们在函数中利用 setInterval() 定时产生 value,并通过 observer.next() 发射给 Subscriber。

最后,我们还需要返回一个函数,它会在 Observable 被取消订阅时执行,我们可以利用 clearInterval() 来清理定时器。

完整代码如下:

function Observable(subscribe) {  this._subscribe = subscribe;}Observable.prototype.subscribe = function(observer) {  const subscription = new Subscription();  this._subscribe({    ...observer,    subscription  });  return subscription;}Observable.create = function(subscribe) {  return new Observable(subscribe);}function Subscription() {  this.unsubscribe = function() {}}Subscription.prototype.add = function(sub) {  const originalUnsubscribe = this.unsubscribe;  this.unsubscribe = function() {    sub.unsubscribe();    originalUnsubscribe.call(this);  }}Subscription.create = function(unsubscribe) {  const subscription = new Subscription();  subscription.unsubscribe = unsubscribe;  return subscription;}function interval(period) {  return Observable.create(function(observer) {    let n = 0;    const intervalId = setInterval(() => {      observer.next(n++);    }, period);    return function() {      clearInterval(intervalId);    }  });}

测试代码:

interval(1000).subscribe(console.log);

运行结果:

0
1
2
3
4
5
6
.....