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天前
|
JSON JavaScript 数据格式
手写JS实现深拷贝函数
本文介绍了如何实现一个深拷贝函数`deepClone`,该函数可以处理对象和数组的深拷贝,确保拷贝后的对象与原始对象在内存中互不干扰。通过递归处理对象的键值对和数组的元素,实现了深度复制,同时保留了函数类型的值和基础类型的值。
9 3
|
2天前
|
前端开发 数据可视化 开发者
D3.js 内置的动画函数
D3.js 内置的动画函数
|
3天前
|
JavaScript 前端开发
JavaScript 函数参数
JavaScript 函数参数
17 3
|
3天前
|
JavaScript 前端开发
JS 偏函数、函数柯里化~
该文章介绍了JavaScript中偏函数和函数柯里化的概念、实现方法和使用场景,通过代码示例展示了如何创建预设参数的函数以及如何将多参数函数转换成单参数函数的链式调用。
9 0
JS 偏函数、函数柯里化~
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
71 2
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
65 4
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
56 4
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
70 4
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
73 3
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
63 3