HarmonyOS 鸿蒙Next 有没有函数统一的防抖方案

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 有没有函数统一的防抖方案

有没有函数统一的防抖方案

2 回复

暂时没有统一的防抖方法。 1、普通的防抖可以使用setTimeout实现,

2、生成带返回值的防抖异步函数可以参考以下代码实现

/**

 * 生成带返回值的防抖异步函数,因为防抖而被取消的调用会得到默认值

 *

 * @template T

 * @param fn {(...[*]) => Promise<T>} 异步函数

 * @param defaultValueGetter {() => T} 默认值获取

 * @param delay {number} 防抖时长(ms)

 * @return {(...[*]) => Promise<T>}

 */

export function debounceWithDefaultValue(fn, defaultValueGetter, delay = 500) {

  let timer = null;

  let lastPromiseReject = null;

  return function (...args) {

    const that = this;

    const debouncedMessage = 'debounced';

    return new Promise((resolve, reject) => {

      clearTimeout(timer);

      if (lastPromiseReject) {

        lastPromiseReject(new Error(debouncedMessage));

      }

      lastPromiseReject = reject;

      timer = setTimeout(() => {

        try {

          resolve(fn.apply(that, args));

        } catch (e) {

          reject(e);

        }

        lastPromiseReject = null;

      }, delay);

    }).catch(reason => {

      if (reason?.message === debouncedMessage) {

        return defaultValueGetter.apply(that);

      } else {

        throw reason;

      }

    });

  };

}

更多关于HarmonyOS 鸿蒙Next 有没有函数统一的防抖方案的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next在系统层面上并未提供统一的防抖(Debounce)函数方案。防抖通常是在应用层通过编程逻辑实现的一种技术手段,用于限制某个函数在特定时间内的执行频率,以避免因频繁触发而导致的性能问题或不必要的操作。

在鸿蒙开发中,开发者可以根据自身需求,在事件处理或回调函数中实现防抖逻辑。这通常涉及使用定时器或时间戳来记录上一次函数执行的时间,并在新的触发事件到来时检查是否已达到设定的时间间隔。如果未达到,则忽略新事件;如果已达到,则执行函数并更新时间戳。

实现防抖的方法多种多样,但核心思想都是相同的:控制函数执行频率,确保在指定时间间隔内只执行一次。

值得注意的是,鸿蒙系统提供了丰富的API和框架,开发者可以充分利用这些资源来构建高效、稳定的应用。如果需要在特定场景下实现防抖功能,建议根据具体需求自行编写防抖逻辑。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部