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

JavaScript对接Telegram API异步场景下如何防止指定代码重复执行

根因分析

问题核心是作用域变量重复声明:

  • 外层异步立即执行函数中声明的greeting属于上层作用域
  • 回调函数内部使用var greeting = true重新声明了局部作用域的同名变量,修改操作仅作用于局部变量,外层的greeting始终未被修改,因此每次触发回调时判断条件始终满足。

同时原代码存在两处语法问题:

  1. new RegExp(foo*)参数非法,foo*未用引号包裹会被解析为未定义变量,运行直接报错
  2. 函数括号未完全闭合,存在语法错误

修复代码

删除回调内部的var声明,直接修改外层作用域的标志位即可:

(async () => {
    var greeting = false;

    await telegramListener(
        async (message) => {
            const regex = new RegExp("foo*");
            if (regex.test(message) && !greeting) {
                greeting = true;
                console.log('greeting');
            }
        }
    );
})();

修复后首次匹配到符合正则的消息时会将greeting设为true,后续所有回调触发时都不会再进入该判断分支,逻辑仅执行一次。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:09:03