Telegram Bot - NodeJs - 任务在循环中

Telegram Bot - NodeJs - Tasks are on a loop

有时候;我的电报机器人开始循环多次重复相同的任务。

有时;它重复任务 500 次!!! 这很烦人。

我无法复制的上下文:

主要发生在 :

bot.on("callback_query", function(callbackQuery) {

以后

bot.on('message', function(event) {

Do you guys have experienced this kind of issue ?
How do you manage that kind of issues ?

bot.on('message', function(event) {

the message can be of any type,例如,文本、新聊天成员等。

您可能正在寻找某种类型的消息,例如文本音频等,

在这种情况下,您可以使用 onText() 仅获取消息,或者在 on('message')

中添加对消息类型的检查

我的问题似乎与 Firebase 集成有关。 随着我的数据库更新;它似乎在我的电报机器人上实时生成触发器。

这真的很奇怪....还不知道如何解决;但到目前为止;这是我的问题。

您需要检查 callbackQueryevent 参数并查找更改(如果有)或您在回调中收到的数据。 如果旧数据与新数据不同,则执行其余代码,否则不执行。

bot.on("callback_query", function(callbackQuery) {

根据你的答案来猜

MY issue seems to be linked to Firebase integration. As my database is updated;

Firebase nodejs 库是实时的,on 侦听器将触发您订阅的路径树中发生变化的任何值。在那种情况下,为了尽量减少触发点,我建议如下:

我想你可能会在一些内部有多个 json 值的基本路径上放置一个监听器。取而代之的是,您可以使用以下内容:

// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
    key1: value1,
    key2: value2,
    .
    .
    key200: value200
}

在这里,无论哪个值发生变化,都会触发您的监听器。现在我想你天生只对某些值的变化感兴趣(比如值 1 和值 2)

One way to handle is to do multiwrite

Multiwrite 将确保您的所有写入都同时进行,并且只会触发一个侦听器事件

Second approach is to keep track of lastUpdated timestamp

让我们想象第二个结构

// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
    key1: value1,
    key2: value2,
    .
    .
    key200: value200
},
lastUpdatedTs: <epochTs>

You put your on listener on lastUpdatedTs and update it using multiwrite whenever you are updating something important inside y object. Whenever lastUpdatedTs changes, you go ahead and do a firebase fetch on y. This enables you to throttle much better and not let firebase on listener on the data go rogue inside your code.