函数参数可以拥有 javascript 中的方法吗?

can a function parameter own a method in javascript?

我正在尝试理解 observables RxJs 并且我正在使用 angular 框架!我无法理解 'subscriber function' 中实际发生了什么,它有一个名为 'observer' 的参数,并且这个参数在函数体中有一个方法,它的名称是 next()!可以是一个函数参数自己的方法?基于什么规则?! 下一个问题是:'Observable' class 中发生了什么?我认为订阅者函数 returns 或者更准确地说,创建一个值并将其传递给 Observable 实例!当我们在 'customIntervalObservable' 上调用 subscribe 方法时,它会将该数据或值传递给 subscribe 方法吗? 我说得对吗?

const customIntervalObservable = new Observable(function subscriber(
  observer
) {
  let count = 0;
  setInterval(() => {
    count++;
    observer.next(+count);
    if (count > 3) {
      observer.error(new Error("count is greater than 3"));
    }
  }, 1000);
});
this.firstObjSubs = customIntervalObservable.subscribe(
  (data: number) => {
    console.log(data);
  },
  (error) => {
    console.log(error), alert(error.message);
  }
);

}

 ngOnDestroy() {
    //this.firstObjSubs.unsubscribe();
    this.firstObjSubs.unsubscribe();
  }
}

一个函数参数可以拥有一个方法吗?

Javascript 函数参数没有类型,因此您可以传递任何您想要的值 - 包括对象。

'Observable'class发生了什么?

我试试看:

  • observable 基本上只是一个 - subscribe() - 函数的包装器,它本质上描述了 observable 行为的逻辑。
  • observable 能够通知 subjects - 或 subscribers,或 observers - 在其生命周期中其状态发生的变化。为此,合同规定 observable 应调用 subject next() 方法。此方法应描述 subject 希望如何对此类更改做出反应的逻辑。
  • subject 有兴趣被 observable 通知其状态更改时,它会执行 observable subscribe() 方法,将自己作为争论。这有效地为 observable 提供了调用 subject next() 方法的能力,只要它的逻辑要求这样做。

基本上用代码来说明这一点:

// Function describing the observable logic.
function subscribe(observer){
  // Observable logic, including calling observer.next() as many times as the logic dictates to notify the observer of state changes.
}
// Observable wrapper.
let observable = new Observable(subscribe)
// Subject interested in being notified of the observable state changes.
let observer = {
    next(value){
        // Logic for how to react to notifications from the observable.
    }
}
// Effectively execute the observable logic.
observable.subscribe(observer)

为了简单起见,我省略了一些更小的概念 - 例如 subject complete()error() 方法,以及返回的 unsubscribe() 函数通过 observable subscribe() 函数。

还有一点:

您可以将 Observer 视为观察 Observable 并对通知做出反应的东西。

什么通知?

  • 下一步:当另一个项目被发射到 Observable 中时
  • 错误:发生错误时
  • 完成:当没有更多的项目要发出时

Observer 是一个具有三个功能的对象:一个用于每种类型的通知。您可以在代码中定义一个观察者,如下所示。但这并不常见。

然后将该 Observer 对象传递到订阅中,如下所示:

更常见的是,您将 传递下一个回调,如下面第一个示例所示。或者一个对象,其中定义了一个、两个或三个回调函数,如第二个示例所示。

subscribe 方法告诉 Observable 流开始发出它的值。它 而不是 本身发出任何值。将其视为一种流媒体服务,例如 Disney+ 或 hulu。您必须先订阅该服务才能播放电影。

这有帮助吗?