当前位置:首页 > JavaScript

js实现poll函数

2026-02-02 19:02:17JavaScript

js实现poll函数

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

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…