【问题标题】:can a function parameter own a method in javascript?函数参数可以拥有javascript中的方法吗?
【发布时间】:2021-05-01 14:53:20
【问题描述】:

我正在尝试理解 observables RxJs,并且我正在使用 Angular 框架!我无法理解'subscriber function'中实际发生的事情,它有一个名为'observer'的参数,并且这个参数在函数体中有一个方法,它的名字是next()!一个函数参数可以拥有一个方法吗?根据什么规则?! 下一个问题是:“Observable”类发生了什么?我认为订阅者函数返回或更准确地说,创建并将值传递给 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 angular rxjs observable


    【解决方案1】:

    这里还有一点:

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

    什么通知?

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

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

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

    更多情况下,您会或者传递下一个回调,如下面的第一个示例所示。或者具有一个、两个或三个回调函数的对象,如第二个示例所示。

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

    这有帮助吗?

    【讨论】:

    • 太棒了!您可以将此标记为您关闭问题的答案吗?谢谢!
    【解决方案2】:

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

    Javascript 函数的参数没有类型,所以你可以传递任何你想要的值——包括一个对象。

    “Observable”类发生了什么?

    我试试看:

    • observable 基本上只是一个包装器 - subscribe() - 基本上描述了 observable 行为逻辑的函数。
    • observable 能够通知subjects - 或subscribersobservers - 在其生命周期中其状态发生的变化。为此,存在一个声明 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)
    

    为了简单起见,我省略了一些更小的概念——例如subjectcomplete()error()方法,以及observablesubscribe()函数返回的unsubscribe()函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多