有时;我的电报机器人开始在循环中多次重复相同的任务。
有时;它重复任务500次! 这非常烦人。
我无法复制的背景:
<div class="product-thumb">
<a href="images/product-image7.jpg" class="image-popup" title="screenprinting">
<img src="images/product-image7.jpg" class="img-responsive" alt="">
<div class="product-info">
<div class="product-item">
<h3>PRODUCT1</h3>
<p>Size / Size / Size</p>
</div>
<div class="product-price">
<span>P50</span>
</div>
</div>
</a>
</div>
或bot.on("callback_query"
); 主要是发生在:
bot.on('message')
和
bot.on("callback_query", function(callbackQuery) {
你们经历过这种问题吗? 你是如何处理这类问题的?
答案 0 :(得分:1)
bot.on(&#39; message&#39;,function(event){
the message can be of any type
,例如,文字,新聊天会员等。
您可能正在寻找某种类型的消息,例如文本音频等,
在这种情况下,你可以使用onText()来获取消息,或者在里面添加对消息类型的检查(&#39; message&#39;)
答案 1 :(得分:1)
我的问题似乎与Firebase集成有关。 随着我的数据库更新;它似乎在我的电报机器人上实时生成一个触发器。
这真的很奇怪......还不知道如何解决它;但到目前为止;这是我的问题。
答案 2 :(得分:1)
您需要检查callbackQuery
和event
参数,并查找更改,如果您在回调中收到任何数据或数据。
如果旧数据与新数据不同,则执行其余代码,否则不执行。
答案 3 :(得分:0)
bot.on("callback_query", function(callbackQuery) {
根据你的回答猜测
我的问题似乎与Firebase集成有关。随着我的数据库更新;
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)
处理的一种方法是进行多重写
Multiwrite将确保您的所有写入都是一次性的,并且只会在侦听器事件上触发一次
第二种方法是跟踪lastUpdated时间戳
让我们想象一下第二个结构
// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
key1: value1,
key2: value2,
.
.
key200: value200
},
lastUpdatedTs: <epochTs>
您将on Listener放在lastUpdatedTs上,并在更新y对象内部重要内容时使用multiwrite更新它。每当lastUpdatedTs发生更改时,您都会继续在y上执行firebase提取。这使您能够更好地节流,并且不会让数据上的监听器上的firebase在您的代码中变得流氓。