我需要我的NodeJs来继续在mongodb中创建随机数据。
我避免从客户端调用它,因为这应该是完全发生在后端的事情。
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>的正确方法是什么?
发布于 2016-02-19 14:21:38
只要有活动计时器,脚本就会继续运行。
您问题中的代码有一个小缺陷,即每次调用函数本身时都会调用setInterval,但函数本身从未被调用过。这意味着它没有启动,如果要启动它,您将一直添加新的间隔,直到进程、数据库进程或整个系统崩溃为止。
一个使用setInterval的例子
function ping() {
console.log('ping');
}
setInterval(ping, Math.random() * 1000);只需使用随机间隔启动ping-ing (其中随机时间只生成一次,并用作pings之间的间隔)。
一个使用setTimeout的例子(这似乎是您想要的)
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,并且它将继续以随机间隔调用自己。
发布于 2016-02-19 14:15:01
使用此函数注册autoCreate调用
setTimeout(autoCreate, 1000);这将每1秒注册一次对autoCreate函数的调用。
还在回调MongoClient.connect函数的最后一行调用MongoClient.connect函数。
发布于 2016-02-19 14:19:37
您可以在声明后调用,没有客户端交互。
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 https://stackoverflow.com/questions/35507226
复制相似问题