繁体   English   中英

Nodejs循环事件执行

[英]Nodejs loop event execution

你好,我的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 else

require()加载一个模块一次,然后从缓存中检索它,并且不执行位于模块内的任何代码而不显式执行任何函数。

建议从每个方法中导出一个专用方法,并在您的分支中显式执行它们。

有关更多详细信息,请参阅要求

我找到了这种方法来解决我的问题,代码如下所示:

 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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM