当前位置:首页 > JavaScript

js实现poll函数

2026-02-02 19:02:17JavaScript

实现 Poll 函数的方法

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

js实现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
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…