【问题标题】:Double the function in each request在每个请求中加倍功能
【发布时间】:2020-08-20 04:59:01
【问题描述】:

在我的 nodejs 应用程序中,我有一个包含以下内容的文件:

index.js 内容:

var app = require('express')();
var http = require('http').Server(app);

function start(){
    var timer = setTimeout(function(){
        check();
        clearTimeout(timer);
    }, 60000); // 1 minutes
}

function check(){
    // my custom codes....
    console.log('checked');
    start(); //return again to start
}

start();

http.listen(3008, function(){
  console.log('listening on *:' + 3008);
});

最多每 60 秒检查一次我的check 函数。 此代码有效,但有一个问题,例如,当我的应用程序中有 5 个用户在线时,我在控制台中看到 check 函数在 60 秒后重复!

//First 60 seconds
checked

//Second 60 seconds
checked
checked

//third 60 seconds
checked
checked
checked
checked

// check function repated again in each 60 seconds !

我尝试了几种方法,但都不起作用。

【问题讨论】:

  • 我将此文件用作我网站的 api。此功能每 60 秒检查一次我的用户付款,但请求在接下来的 60 秒内重复。
  • 面对,我需要每 60 秒检查一次功能
  • 我知道,没有人能帮我解决这个问题。你知道我比别人有什么优势吗?通过我自己的努力,我可以准确地,在允许的范围内,去追求它。我不记得曾经留下任何未完成的项目。这就是为什么我总是有我的客户。你很少能看到的东西。我会每天变得更强大。
  • 这是因为在 setTimeout 函数中使用时,您的计时器引用未绑定到创建它的闭包:stackoverflow.com/questions/36209784/…
  • 感谢朋友,我以这种方式进行测试,但不适用于我的情况。谢谢,我从不记得它是什么东西,我做不到。我很想成为我做不到的东西,但无论如何我都会去做,质量标准是我的首要任务。无论如何,我会尝试修复。

标签: javascript node.js express timeout


【解决方案1】:

你试过 setInterval(function, timeout);

var app = require('express')();
var http = require('http').Server(app);

function start(){
    var timer = setInterval(function(){
        check();
    }, 60000); // 1 minutes
}

function check(){
    // my custom codes....
    console.log('checked');
}

start();

http.listen(3008, function(){
    console.log('listening on *:' + 3008);
});

【讨论】:

  • 谢谢,您将删除 clearTimeout,我知道此代码在这种情况下不起作用。
  • 我的函数总是有 3 张地图。所以现在我要运行第二张地图。如果不工作,第三张地图应该工作。
  • 另外,setInterval 让情况变得更糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多