js防抖函数返回值问题解决方案

简介: 本文介绍了如何在JavaScript中创建一个带有返回值的防抖函数,通过结合Promise来实现。这种防抖函数可以在事件触发一定时间后再执行函数,并能处理异步操作的返回值。文章提供了防抖函数的实现代码和如何在实际项目中使用该防抖函数的示例。

需求:

当我们在使用防抖函数的时候会碰到需要使用传入函数的返回值的问题,所以我们配合promise来实现。

带有返回值的防抖函数:

/**
 * @param {函数} fn
 * @param {防抖时间间隔} wait
 */
//防抖函数
const debounce = () => {
   
    let timer = null;
    const newDebounce = function(fn, wait, ...args) {
   
        return new Promise((resolve, reject) => {
   
            if (timer !== null) {
   
                clearTimeout(timer);
            }
            timer = setTimeout(_ => {
   
                try {
   
                    resolve(fn(...args));
                } catch (e) {
   
                    reject(e);
                }
            }, wait);
        });
    };
    return newDebounce;
};

使用:
在 menuDrag.js中导出方法

//收集promose错误
const toAwait = (promise) => {
   
    return promise.then(data => [null, data]).catch(err => [err, undefined])
}

//移动菜单接口
export const moveBMenu = async (list = []) => {
   
    console.log("入参list", list);
    let data = await toAwait(secapi.secPost(process.env.VUE_APP_URL + 'bMenu/moveBMenu', {
    list }))
    if (data[1] !== undefined) {
   
        console.log("移动菜单接口", data[1])
        return data[1]
    } else {
   
        console.log("%c查询菜单接口", "color:red");
        return []
    }
}
//在页面引用js中的方法
import {
    moveBMenu } from './menuDrag.js';
 data() {
   
        return {
   
            newDebounce: debounce(),
            }
        },
methods: {
   
         //拖拽菜单请求接口
        async changeMoveBMenuList() {
   
        //this.queryList我接口需要的参数对象
            let result = await this.newDebounce(moveBMenu, 500, this.queryList);
            if (result.code === 1) {
   
                this.$message.success('移动菜单成功');
            } else {
   
                this.$message.error('移动菜单失败');
            }
        },

}
目录
相关文章
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
686 1
|
24天前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
39 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
23天前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
2月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
2月前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
2月前
|
存储 JavaScript 前端开发
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
19 0
|
7月前
|
JavaScript
JS中防抖和节流的区别是什么
JS中防抖和节流的区别是什么
49 0
|
7月前
|
JavaScript 前端开发 UED
【面试题】面试官:说说你对js中的 防抖 和 节流 的理解
【面试题】面试官:说说你对js中的 防抖 和 节流 的理解
|
3月前
|
前端开发 JavaScript UED
JavaScript防抖和节流的使用及区别
JavaScript防抖和节流的使用及区别
105 57
|
6月前
|
前端开发 JavaScript Java
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
66 3