当前位置:首页 > JavaScript

js实现poll函数

2026-02-02 19:02:17JavaScript

js实现poll函数

实现 Poll 函数的方法

在 JavaScript 中,poll 函数通常用于定期检查某个条件是否满足,直到条件为真或超时。以下是几种实现方法:

使用 setTimeout 递归

function poll(fn, condition, interval, timeout) {
    const endTime = Date.now() + timeout;

    const check = () => {
        fn().then(result => {
            if (condition(result)) {
                return result;
            } else if (Date.now() < endTime) {
                setTimeout(check, interval);
            } else {
                throw new Error('Polling timed out');
            }
        }).catch(err => {
            throw err;
        });
    };

    return check();
}

使用 async/await 和 setInterval

async function poll(fn, condition, interval, timeout) {
    const endTime = Date.now() + timeout;

    return new Promise((resolve, reject) => {
        const timer = setInterval(async () => {
            try {
                const result = await fn();
                if (condition(result)) {
                    clearInterval(timer);
                    resolve(result);
                } else if (Date.now() >= endTime) {
                    clearInterval(timer);
                    reject(new Error('Polling timed out'));
                }
            } catch (err) {
                clearInterval(timer);
                reject(err);
            }
        }, interval);
    });
}

使用方法示例

// 模拟一个异步函数
function fetchData() {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(Math.random() > 0.5);
        }, 1000);
    });
}

// 调用 poll 函数
poll(
    fetchData,
    result => result === true, // 条件:返回 true 时停止
    1000, // 每隔 1 秒检查一次
    5000 // 超时时间 5 秒
).then(result => {
    console.log('Polling succeeded:', result);
}).catch(err => {
    console.error('Polling failed:', err);
});

注意事项

  • fn 必须是一个返回 Promise 的函数。
  • condition 是一个回调函数,用于检查结果是否符合预期。
  • interval 是每次检查的时间间隔。
  • timeout 是整个轮询的超时时间。

这些方法可以根据具体需求进行调整,例如添加重试次数限制或自定义错误处理逻辑。

js实现poll函数

标签: 函数js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Ja…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…