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('移动菜单失败');
            }
        },

}
目录
相关文章
|
13天前
|
JavaScript
JS实现多条件搜索函数
JS封装的多条件搜索
|
2月前
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
87 32
|
1月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
5月前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
70 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
5月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
7月前
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
68 4
JavaScript基础知识-函数的参数
|
7月前
|
JavaScript 前端开发
JavaScript 函数参数
JavaScript 函数参数
56 3
|
9月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
92 1
|
10月前
|
JavaScript
js -- 函数总结篇,函数提升、动态参数、剩余参数、箭头函数、this指向......
js -- 函数总结篇,函数提升、动态参数、剩余参数、箭头函数、this指向......
|
11月前
|
JavaScript 前端开发
【专栏】`Function.prototype.apply` 在JavaScript中用于动态设定函数上下文(`this`)和参数列表
【4月更文挑战第29天】`Function.prototype.apply` 在JavaScript中用于动态设定函数上下文(`this`)和参数列表。它接受两个参数:上下文对象和参数数组。理解`apply`有助于深入JS运行机制。文章分三部分探讨其原理:基本概念和用法、工作原理详解、实际应用与注意事项。在应用中要注意性能、参数类型和兼容性问题。`apply`可用于动态改变上下文、传递参数数组,甚至模拟其他语言的调用方式。通过深入理解`apply`,能提升代码质量和效率。
67 3
下一篇
oss创建bucket