Node.js循环事件执行

时间:2019-12-18 12:15:54

标签: javascript node.js redis timer

你好,我的setInterval遇到问题,它仅在下面的if else检查了我的功能后才执行

const redis = require('redis');
const cache = redis.createClient();

require('./execSocket');

function teste(){

    cache.dbsize(function(err,res){

        if(res){
            console.log(res);

           if(res > 10){

                require('./execSql');
                
            }else{
                
                require('./execSocket');
            }

        }else{
             
             console.log(err);
             require('./execSocket');
        }
    });

}

setInterval(function(){

    teste();

},20000);

当我运行代码时,在第一次运行setInterval时,它会进行常规检查,但是在第二次运行setInterval中,它只给我保存在bd中的记录数,而不检查if {{ 1}}

2 个答案:

答案 0 :(得分:0)

require()一次加载一个模块,然后从缓存中检索它,并且在不显式执行任何功能的情况下不执行位于模块内部的任何代码。

建议从每个方法中导出专用方法,然后在您的分支中明确执行它们。

有关更多详细信息,请参见require

答案 1 :(得分:0)

我找到了解决问题的方法,代码如下:

const redis = require('redis');
const cache = redis.createClient();
const shellExec = require('shell-exec');


require('./execSocket');

function test(){

    cache.dbsize(function(err,res){

        if(res){
            console.log(res);
            let i = 10;
           if(res > i){
           
                console.log("<<<<<wait....>>>>>")
                console.log("<<<<<saving records....>>>>>")
                shellExec('node execSql').then(sucess =>{
                    console.log(sucess)
                }).catch(err =>{
                    console.log(err);
                });
                
            }else{
                console.log("<<<<<The resulting is not yet greater than "+i+" >>>>>");
                console.log("<<<<<loading....>>>>>");
                
                shellExec('node execSocket').then(sucess =>{
                    console.log(sucess)
                }).catch(err =>{
                    console.log(err);
                });
                
            }

        }else{
             
             console.log(err);
             require('./execSocket');
        }
    });

}

setInterval(function(){

    test();

},20000);

这基本上解决了我的问题!