我已经构建了一个函数,它将触发器列表发送到回调函数:
exports.get_triggers = function(_id, result, callback) {
db.find({ "triggers": {$ne:""} }).exec(function(err, docs){
var children = Array();
for(var i=0; i<docs.length; i++){
if ( docs[i].triggers.id == _id ) {
console.log(`DEBUG: Trigger found : ${docs[i].name} (${docs[i]._id}`);
children.push(docs[i]);
}
}
callback(children);
});
};
这在主程序中运行良好。但是,我还需要从脚本调用get_triggers
。下面是我做这件事的方式:
mylib.get_triggers(job_id,job_result,function(children){
// executing children batchs
for(var i=0; i<children.length; i++){
console.log(`DEBUG: triggering job : ${children[i].name} (${children[i]._id})`);
}
console.log("DEBUG: end get_triggers");
});
这个脚本由bash从crontab执行。它正确地获取触发器列表,但问题是它永远不会退出...如果我添加process.exit()
,脚本在触发器被检索之前结束。
我想知道我的错误在哪里(db
是nedb
)?
谢谢你
1条答案
按热度按时间2exbekwf1#
如果您遇到类似的问题,则会出现此问题,因为nedb不支持并发访问。
事实上,数据库文件已经被主程序打开,我正在通过批处理程序再次打开它。因此,
db.find
永远不会退出,因为该文件仍然被打开(由其他程序)。我最后不得不导出
get_triggers
并通过API调用来调用它。