javascript - 在 lodash 的 throttle 装饰器上使用 flush

标签 javascript typescript lodash

使用 TypeScript(JavaScript 和 Angular):

我希望 lodash 的 throttle 装饰器在用户浏览页面时限制 API 调用,但在他们卸载(离开)网站之前仍然触发。

在 typescript 构造函数中,我有 window.addEventListener('beforeunload', () => this.onUnload());

onUnload() 函数声明为

onUnload() {
    this.thisIsTheThrottledFunction.flush;
}

但我收到错误响应“属性‘flush’在类型‘() => Promise’上不存在。”

我试图访问其 .flush 方法的函数是另一个函数的已声明限制版本。该功能已成功限制,因此我相信部分代码可以正常工作。访问 .flush 方法的最佳方式是什么?

最佳答案

您应该能够通过验证 this 的值来调试它。在我看来你只需要 bind将对象的 this 值传递给 onUnload 函数(或者您可以将其传入)。例如,您可以将其放入您的构造函数中:this.onUnload = this.onUnload.bind(this)。此语法有一个优点,您可以在类中使用 onUnload = () => { ... } 定义它。这两种方法都将方法附加到实例,而不仅仅是将其作为原型(prototype)的一部分。或者,您可以将绑定(bind)函数直接传递给您的事件监听器:

window.addEventListener('beforeunload', this.onUnload.bind(this));

关于javascript - 在 lodash 的 throttle 装饰器上使用 flush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224540/

相关文章:

javascript - 为什么我的 Canvas 绘制图像没有显示在 Angular2 组件中

javascript - 如何阻止 ngRepeat 重复在文本区域中输入的数据?

typescript - 静态常量 : how?

javascript - 未使用的属性(property)下降?

javascript - 基于Json的架构怎么称呼?

javascript - Chart.js 如何删除图表上的最终标签

javascript - 使用键和数组 typescript 编写一个对象

javascript - Angular 2 : Bind form context to ngTemplateOutlet

Javascript,返回匹配的第一个(子)对象

javascript - 如何使用 lodash 的 _sortBy() 按自定义要求按字母顺序排序此列表?