首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持节点js函数运行,而不使用来自前端的任何调用。

保持节点js函数运行,而不使用来自前端的任何调用。
EN

Stack Overflow用户
提问于 2016-02-19 14:05:55
回答 4查看 950关注 0票数 0

我需要我的NodeJs来继续在mongodb中创建随机数据。

我避免从客户端调用它,因为这应该是完全发生在后端的事情。

代码语言:javascript
复制
var autoCreate = function(){
  var randomNumb = (Math.random()* (10-0) + 0).toFixed(0);
  var randomThing = randomstring.generate({
    length: randomNumb,
    charset: 'alphabetic'
  });

  Thing.create({
    name: randomThing,
    readByUser: false 
  }, function(err, thing) {
    if(err) { return handleError(res, err); }
  });

  setInterval(function() {
    autoCreate();
  }, randomNumb*1000);
}

但是我第一次把这个函数称为函数的方式和地点。在我的Node文件/控制器中,我不能只编写autoCreate(),它会中断。

做it>的正确方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-19 14:21:38

只要有活动计时器,脚本就会继续运行。

您问题中的代码有一个小缺陷,即每次调用函数本身时都会调用setInterval,但函数本身从未被调用过。这意味着它没有启动,如果要启动它,您将一直添加新的间隔,直到进程、数据库进程或整个系统崩溃为止。

一个使用setInterval的例子

代码语言:javascript
复制
function ping() {
  console.log('ping');
}

setInterval(ping, Math.random() * 1000);

只需使用随机间隔启动ping-ing (其中随机时间只生成一次,并用作pings之间的间隔)。

一个使用setTimeout的例子(这似乎是您想要的)

代码语言:javascript
复制
function ping() {
  clearTimeout(timer);
  console.log('ping');

  timer = setTimeout(ping, Math.random() * 1000);
}

//  ensure the timer variable exists in the global scope
var timer;
ping();

在本例中,您需要自己启动ping-ing,并且它将继续以随机间隔调用自己。

票数 2
EN

Stack Overflow用户

发布于 2016-02-19 14:15:01

使用此函数注册autoCreate调用

代码语言:javascript
复制
setTimeout(autoCreate, 1000);

这将每1秒注册一次对autoCreate函数的调用。

还在回调MongoClient.connect函数的最后一行调用MongoClient.connect函数。

票数 0
EN

Stack Overflow用户

发布于 2016-02-19 14:19:37

您可以在声明后调用,没有客户端交互。

代码语言:javascript
复制
var autoCreate = function(){
    var randomNumb = (Math.random()* (10-0) + 0).toFixed(0);
     var randomThing = randomstring.generate({
    length: randomNumb,
    charset: 'alphabetic'
  });

   Thing.create({
    name: randomThing,
    readByUser: false 
  }, function(err, thing) {
      if(err) { return handleError(res, err); }
    });

   setInterval(function() {
  autoCreate();
  }, randomNumb*1000);

  }

autoCreate(); //Call here 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35507226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档