立即设置间隔,然后等待 5 秒
setInterval right away then wait 5 seconds
我正在构建一个 Node.js 应用程序,我有一个 setInterval
函数,每 5 秒 运行s。我的问题是这个函数必须 运行 在我的任何路由在该文件中工作之前。
我需要在我的应用程序启动时立即 运行 setInterval,但之后每 5 秒 运行。
到目前为止,我已尝试将 setInterval 设置为较低的数量,但这给我的外部服务带来了太多压力,因为这种代码格式将用于一堆文件 (~30)。
var express = require('express');
var router = express.Router();
const config = require("../config/config");
const request = require("request");
var consul = require("consul")({host: '10.0.1.248'});
var consulBase = [];
var options;
setInterval(() => {
consul.catalog.service.nodes('auth', function(err, results) {
if(err) {console.log(err); throw err;}
if(results.length <= 0) throw 'Unable to find any services with that name.. exiting process...';
if(results.length > 0) consulBase = [];
results.forEach((result) => {
consulBase.push(result.ServiceAddress+ ':' +result.ServicePort);
});
var serviceURL = 'http://' + consulBase[Math.floor(Math.random()*consulBase.length)];
options = {
baseUrl : serviceURL
};
});
}, 5 * 1000);
router.get('/login', (req, res) => {
request.get(req.path, options, (error, response, body) => {
if (error) throw error;
res.send(body);
});
});
module.exports = router;
我愿意将它放在不同的文件中,然后将其自身呈现为一个函数,该函数接受一个服务名称并给出一个包含我需要的数据的 options
变量。虽然不确定我会怎么做。
将 setInterval
包装在一个调用参数中的函数的简单方法中,然后创建间隔和 returns 间隔 ID。
let intervalId = executeAndRepeat(function(){
//do your thing
if(someCondition)
return clearInterval(intervalId);
}, 5 * 1000);
function executeAndRepeat(fcn, intervalTime){
fcn();
return setInterval(fcn, intervalTime);
}
您可能想使用 node-cron 这样的包查看节点的计划任务。例如下面的代码将 运行 每 5 秒
var cron = require('node-cron');
yourCode();
cron.schedule('*/5 * * * * *', () => {
yourCode();
});
function yourCode(){
console.log('running every 5 seconds');
}
没有 node-cron
yourCode();
setInterval(() => {
yourCode();
}, 5 * 1000);
function yourCode (){
console.log('running every 5 seconds');
}
在单独的文件中
//code.js
module.exports.yourCode= (req, res) =>{
console.log('running every 5 seconds');
}
//app.js
const yourCode = require ('./code').yourCode;
yourCode();
setInterval(() => {
yourCode ();
}, 5 * 1000);
我正在构建一个 Node.js 应用程序,我有一个 setInterval
函数,每 5 秒 运行s。我的问题是这个函数必须 运行 在我的任何路由在该文件中工作之前。
我需要在我的应用程序启动时立即 运行 setInterval,但之后每 5 秒 运行。
到目前为止,我已尝试将 setInterval 设置为较低的数量,但这给我的外部服务带来了太多压力,因为这种代码格式将用于一堆文件 (~30)。
var express = require('express');
var router = express.Router();
const config = require("../config/config");
const request = require("request");
var consul = require("consul")({host: '10.0.1.248'});
var consulBase = [];
var options;
setInterval(() => {
consul.catalog.service.nodes('auth', function(err, results) {
if(err) {console.log(err); throw err;}
if(results.length <= 0) throw 'Unable to find any services with that name.. exiting process...';
if(results.length > 0) consulBase = [];
results.forEach((result) => {
consulBase.push(result.ServiceAddress+ ':' +result.ServicePort);
});
var serviceURL = 'http://' + consulBase[Math.floor(Math.random()*consulBase.length)];
options = {
baseUrl : serviceURL
};
});
}, 5 * 1000);
router.get('/login', (req, res) => {
request.get(req.path, options, (error, response, body) => {
if (error) throw error;
res.send(body);
});
});
module.exports = router;
我愿意将它放在不同的文件中,然后将其自身呈现为一个函数,该函数接受一个服务名称并给出一个包含我需要的数据的 options
变量。虽然不确定我会怎么做。
将 setInterval
包装在一个调用参数中的函数的简单方法中,然后创建间隔和 returns 间隔 ID。
let intervalId = executeAndRepeat(function(){
//do your thing
if(someCondition)
return clearInterval(intervalId);
}, 5 * 1000);
function executeAndRepeat(fcn, intervalTime){
fcn();
return setInterval(fcn, intervalTime);
}
您可能想使用 node-cron 这样的包查看节点的计划任务。例如下面的代码将 运行 每 5 秒
var cron = require('node-cron');
yourCode();
cron.schedule('*/5 * * * * *', () => {
yourCode();
});
function yourCode(){
console.log('running every 5 seconds');
}
没有 node-cron
yourCode();
setInterval(() => {
yourCode();
}, 5 * 1000);
function yourCode (){
console.log('running every 5 seconds');
}
在单独的文件中
//code.js
module.exports.yourCode= (req, res) =>{
console.log('running every 5 seconds');
}
//app.js
const yourCode = require ('./code').yourCode;
yourCode();
setInterval(() => {
yourCode ();
}, 5 * 1000);