【问题标题】:cleatInterval() not stoping setInterval() in node.jsclearInterval() 没有停止 node.js 中的 setInterval()
【发布时间】:2017-11-28 00:18:17
【问题描述】:

我正在使用 node.js 中的 facebook bot(node.js 的新手),我遇到了问题。 当用户发送最后一条消息时,我需要检测它并设置提醒(让我们在一分钟内提醒人们)

if(!candidate.finished){
                clearTimeout(JSON.parse(candidate.timerId));
                var t = setTimeout(()=>{
                    candidate.timerId = JSON.stringify(t)
                    console.log("STRINGIFY " + candidate.timerId)
                    candidate.save();
                    sendQuickReplies(sender,"Do you want to continue application process?",['Yes','No'],token);
                }, 60000);
 }

问题是当用户发送另一条消息时 clearTimeout 不会杀死 setTimeout(当用户发送另一条消息时,此函数将被重新调用,它会停止前一个计时器并开始新的计时器) 此代码在一分钟内提醒人,但不会停止提醒

【问题讨论】:

    标签: node.js mongoose chatbot facebook-chatbot


    【解决方案1】:

    您需要在调用clearTimeout 之前声明您的计时器var t = setTimeout(() => {...}, 60000);,并在变量t 上使用clearTimeout。在您的代码 sn-p 中,clearTimeout 没有引用计时器变量 t

    所以这样的事情应该可以代替:

    var t = setTimeout(() => {...}, 60000);
    clearTimeout(t);
    

    您的 1 分钟计时器将被取消。

    就您的问题而言,我想您希望在用户向您发送消息后停止提醒计时器的执行。因此,您只需在启动计时器时跟踪计时器变量t,一旦收到所需的消息,使用clearTimeout(t) 停止计时器t。这样,对定时器的正确引用就会停止,不会重复提醒用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多