【问题标题】:Angular - Debounce Time Promise<boolean>Angular - 去抖时间承诺<boolean>
【发布时间】:2021-09-03 21:30:53
【问题描述】:

我在服务中有一个方法,该方法在用户提交表单时返回一个 Promise。

问题是当用户点击 x 次时,他跳过了 x 个屏幕。

我正在搜索去抖动时间运算符,但它仅适用于 Observable。在这里,我有一个承诺。

有什么建议吗?

  goToNextRoute = (queryParams?: Params): Promise<boolean> =>
    this.routeRecursive(this.getNextRoute, queryParams);

【问题讨论】:

  • 如何使用 observable 以及 debounceTime 无论如何都会附带 angular...

标签: angular promise debounce


【解决方案1】:

你可以实现自己的去抖动功能

function debounce(f, interval) {
  let timer = null;

  return (...args) => {
    clearTimeout(timer);
    return new Promise((resolve) => {
      timer = setTimeout(
        () => resolve(f(...args)),
        interval,
      );
    });
  };
}

或者你可以使用 lodash 的 debounce 功能

https://lodash.com/docs/4.17.4#debounce

_.debounce(somethingThatReturnsAPromise, interval, {
  leading: true,
  trailing: false
})

【讨论】:

    【解决方案2】:
    /** Emits everytime the user clicks*/
    private goToNextRouteClick = new Subject<Params | undefined>(); 
    
    constructor(){
      this.goToNextRoute.pipe(debounceTime(TIME)).subscribe( params => 
      this.routeRecursive(this.getNextRoute, queryParams) )
    }
    
    /** Callback to goToNextRoute button*/
    public goToNextRoute = (queryParams?: Params) => this.goToNextRoute.next(queryParams);
    
    

    我不知道你的代码,但你应该在 ngOnDestroy() 中取消订阅

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 2015-11-10
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      相关资源
      最近更新 更多