Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点JS-来自上一个实例或状态的clearTimeout_Javascript_Node.js_Instance_Telegram_Telegram Bot - Fatal编程技术网

Javascript 节点JS-来自上一个实例或状态的clearTimeout

Javascript 节点JS-来自上一个实例或状态的clearTimeout,javascript,node.js,instance,telegram,telegram-bot,Javascript,Node.js,Instance,Telegram,Telegram Bot,我正在做一个电报机器人项目,它与setTimeout有很大关系。目前我的问题是,我无法清除超时,即使我已经将其置于模块.exports上 这是我的 问题是,每当我清除超时时,它什么也不做。超时仍在继续 这是我创建超时的代码 var createSingleton = require('create-singleton'); var p3 = createSingleton(function mySingleton() { service.canceledTimeout(res,bot) }

我正在做一个电报机器人项目,它与setTimeout有很大关系。目前我的问题是,我无法清除超时,即使我已经将其置于
模块.exports上

这是我的

问题是,每当我清除超时时,它什么也不做。超时仍在继续

这是我创建超时的代码

var createSingleton = require('create-singleton');

var p3 = createSingleton(function mySingleton() {
  service.canceledTimeout(res,bot)
});

var myInstance3 = new p3();
我有一个叫做“承诺”的模块

module.exports.timeouts = []; //general.timeouts
我把setTimeout对象放在那个模块上

canceledTimeout = function(res,bot) {
    return general.timeouts.push(setTimeout(function () {
        return updateState(general.THIRTY_SECONDS_REMAINING_CHECK_STATE, res)
        .then (function(msg) {
            if (msg !== null) {
            return bot.sendMessage(res.chat.id, msg, general.baseFormat())
            .then (function(x) {

                setTimeout(function () {
                updateState(general.TIMEOUT, res)
                .then (function(msg) {
                    if (msg !== null) {
                    return bot.sendMessage(res.chat.id, msg, general.baseFormat());
                    }
                });
                },30000);

            });             
            }
        });
        },90000));
}
每当游戏/房间结束时,我调用此函数

clearTimeout(general.timeouts);
但是在玩家再次创建房间后,超时仍然会运行

我认为问题在于超时没有被清除。这是我的观点

任何想法或帮助都将受到感谢。
谢谢

我至少看到两个问题:

  • 那里有两个
    setTimeout
    调用,但您不记得其中一个的句柄。如果你不想取消第二个30秒计时器,那没关系,但我想我应该把它取消

  • clearTimeout
    接受单个计时器句柄,但您在此处传递一个数组:

    clearTimeout(general.timeouts);
    
    相反,您需要逐个清除它们:

    general.timeouts.forEach(function(handle) { clearTimeout(handle) });
    
    (如果测试它收到的额外参数不影响它,您可以将其缩短为
    general.timeouts.forEach(clearTimeout);
    。但是,
    forEach
    再次使用三个参数调用其回调,而不仅仅是一个参数,所以在使用之前一定要进行测试。)


  • 我至少看到两个问题:

  • 那里有两个
    setTimeout
    调用,但您不记得其中一个的句柄。如果你不想取消第二个30秒计时器,那没关系,但我想我应该把它取消

  • clearTimeout
    接受单个计时器句柄,但您在此处传递一个数组:

    clearTimeout(general.timeouts);
    
    相反,您需要逐个清除它们:

    general.timeouts.forEach(function(handle) { clearTimeout(handle) });
    
    (如果测试它收到的额外参数不影响它,您可以将其缩短为
    general.timeouts.forEach(clearTimeout);
    。但是,
    forEach
    再次使用三个参数调用其回调,而不仅仅是一个参数,所以在使用之前一定要进行测试。)


  • 您的代码源中有两个问题

    首先,函数中有两个计时器: 设置超时(…,90000) 和 设置超时(…,30000)

    其次,不能将数组传递给clearTimeout方法。它没有效果。 如果要清除阵列中的计时器,必须逐个清除,例如:

    var timeouts = [timer1, timer2, timer3];
    //loop through the array and clear them one by one
    for (var i = 0; i < timeouts.length; i++) {
        clearTimeout(timeouts[i]);
    }
    
    var超时=[timer1,timer2,timer3];
    //在阵列中循环并逐个清除它们
    对于(变量i=0;i
    您的代码源中有两个问题

    首先,函数中有两个计时器: 设置超时(…,90000) 和 设置超时(…,30000)

    其次,不能将数组传递给clearTimeout方法。它没有效果。 如果要清除阵列中的计时器,必须逐个清除,例如:

    var timeouts = [timer1, timer2, timer3];
    //loop through the array and clear them one by one
    for (var i = 0; i < timeouts.length; i++) {
        clearTimeout(timeouts[i]);
    }
    
    var超时=[timer1,timer2,timer3];
    //在阵列中循环并逐个清除它们
    对于(变量i=0;i
    嗨,伙计,谢谢。将首先检查它,并更新结果。凯斯曼,说真的?你刚才治好了我的头痛!我也在数组中添加了第二个超时。谢谢你花时间帮助我。谢谢你,马克!嗨,伙计,谢谢。将首先检查它,并更新结果。凯斯曼,说真的?你刚才治好了我的头痛!我也在数组中添加了第二个超时。谢谢你花时间帮助我。谢谢你,马克!谢谢你指出问题所在,伙计,是的,这就是问题所在。谢谢你指出了问题所在,伙计,是的,这就是问题所在。谢谢