You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for of循环中等待指定变量定义完成后再进入下一轮迭代

解决方案

你可以封装一个轮询查询GM值的Promise方法,替代固定时长的等待逻辑:只有当目标值非空已定义时才会结束等待进入后续逻辑,同时可以配置轮询间隔和最长超时时间避免死等。

步骤1:封装轮询等待工具函数

/**
 * 等待GM值就绪
 * @param {string} key 要查询的GM存储key
 * @param {number} interval 轮询间隔(毫秒),默认200ms
 * @param {number} timeout 最长超时时间(毫秒),默认30000ms即30秒
 * @returns {Promise<any>} 拿到的非空值
 */
function waitForGmValue(key, interval = 200, timeout = 30000) {
    return new Promise((resolve, reject) => {
        const startTime = Date.now();
        // 轮询逻辑
        const check = async () => {
            const value = await GM.getValue(key);
            // 值已定义且非空就返回
            if (value !== undefined && value !== null) {
                resolve(value);
                return;
            }
            // 超过超时时间就抛错
            if (Date.now() - startTime > timeout) {
                reject(new Error(`等待GM值${key}超时`));
                return;
            }
            // 间隔指定时间后再查
            setTimeout(check, interval);
        };
        check();
    });
}

步骤2:修改原循环逻辑

const $j_object = $(".name");
        
for (const element of $j_object) {
    // 直到value_name就绪才会往下走,代替固定3秒等待
    const value_name = await waitForGmValue("value_name");

    // 后续处理逻辑
}

可选优化点

  • 如果你的value_name是通过其他异步事件更新的,优先用事件监听代替轮询,性能更好,比如值更新时触发自定义事件,在等待逻辑里监听事件即可
  • 可以根据你的业务场景调整轮询间隔和最长超时时间,比如值更新频率高就把间隔设短一点

内容的提问来源于stack exchange,提问作者Henrik Petterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:48:00