react hooks 封装任务队列方法
1 点赞
0 条评论
1091 次浏览
发布于 4 个月前
封装任务队列方法可以帮助你更好地管理异步任务和同步任务的执行。当你使用异步API调用获取数据或执行远程操作时,使用任务队列可以按照预期的顺序排队和处理这些调用。这样可以确保按照预期的顺序处理响应,避免并行调用导致的竞争条件和错误。
下面是使用React封装的hooks,想法是包裹一个回调方法,方便修改之前的逻辑,代码入侵小。
// hooks.js
import { useEffect, useState } from 'react'; /** * 任务队列方法 * @param fn 回调的函数 * @param options {Object} delay: 间隔时间, immediate: 是否在首次渲染时立即执行 * @returns {function(...[*]): void} */ export const useTaskQueueFn = (fn, options = { delay: 0, immediate: true }) => { const { delay, immediate } = options || {}; const [tasks, setTasks] = useState([]); const [running, setRunning] = useState(false); const callback = (params) => new Promise((resolve) => { let wait = Number(delay) || 0; if (!tasks.length && running && immediate) { wait = 0; } const timer = setTimeout(async () => { clearTimeout(timer); const res = await fn?.(...params); resolve(res); }, wait); }); useEffect(() => { // 正在运行不执行 if (running) { return; } // 任务为空不执行 if (!tasks.length) { return; } const [latest, ...rest] = tasks; setRunning(true); setTasks(rest); callback(latest).finally(() => setRunning(false)); }, [tasks.length, running]); return (...args) => setTasks((v) => [...v, args]); };
使用:
import { useTaskQueueFn } from './hooks';
// 扫码回调
const handle = useTaskQueueFn(async () => {
// do something
});
完成~
"赞助我们,我们才能做的更多&更好"
赞助支持
还没有评论
写下你的评论...
最热文章
使用dart-sass替换node-sass
6265 浏览 · 0 评论
好玩的CSS3(3)-- 翻转(旋转正反两张)图片
4842 浏览 · 0 评论
浏览器后退跳转到指定的页面
4753 浏览 · 0 评论
pc端常用电脑屏幕分辨率尺寸适配
4695 浏览 · 0 评论
Flutter适配夜间模式
4393 浏览 · 0 评论
最新文章
WebRTC一对一视频通话
739 浏览 · 0 评论
react hooks 封装任务队列方法
1091 浏览 · 0 评论
js通过扫码枪快速录入的实现
1257 浏览 · 0 评论
使用 WebSocket 实现你画我猜实时绘图
1639 浏览 · 0 评论
基于code-server部署自己的云端vscode
4070 浏览 · 0 评论
支付宝动态收款码生成自定义金额及备注
4074 浏览 · 0 评论