javascript - 如何去抖 Angular 2 中的观察者函数?

标签 javascript angular typescript rxjs observable

我正在尝试在 Angular 2 中监听 onScroll 事件,并且我创建了以下有效的代码,但是接下来每个滚动事件都会调用,并且会影响浏览器性能。我希望 observer.next 函数是非常轻量级的,并且订阅者的去抖动就足够了,但要么它不是很轻量级,要么我做错了什么。有人可以帮我有效地去抖动吗?

import {Component, Renderer, OnInit} from "@angular/core";
import {Subject, Observable, Observer} from "rxjs";
@Component({
selector: 'heading',
templateUrl: './heading.component.html',
styles: [require('./heading.component.scss')]
})

export class HeadingComponent implements OnInit {

observable: Observable<Event>;

constructor(private renderer: Renderer) {
    this.observable = new Observable<Event>(
        (observer: Observer<Event>) => {
            this.renderer.listenGlobal('window', 'scroll', (evt: Event) => {
                observer.next(evt);
        })
        }
    );
}

ngOnInit(): void {
    this.observable
        .debounceTime(400)
        .subscribe(
            (evt: Event) => console.log('next event' + evt),
            (err: string) => console.error(err),
            () => console.info('done')
        )
    }
}

最佳答案

在您的代码中,将 .debounceTime(400) 替换为 .debounce(400)

参见文档:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/debounce.md

关于javascript - 如何去抖 Angular 2 中的观察者函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39692412/

相关文章:

javascript - 将类作为参数传递给 Nightmare 评估

angular - 将背景音乐放入 Angular 6

typescript - 在 TypeScript 中,如何将 Union 内的所有类型转换为该类型的数组

javascript - 如何使onclick事件只工作一次

javascript - 我有 n 个列表项。我不需要得到任何具有事件类的项目

angular - 使用 AWS Amplify 构建 Angular 10 应用程序时出错

angular - 为什么表单错误的 getter 在我的 Angular Reactive Form 组件模板中不起作用,但直接引用却可以?

node.js - 无法使用 Typescript 中的生成器编译异步代码

typescript - 在没有 "any."的 TypeScript 中创建 JSON 接口(interface)

javascript - 将变量分配为函数内的标记