nodejs脚本与回调和数据库调用永不退出

jaxagkaj  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(125)

我已经构建了一个函数,它将触发器列表发送到回调函数:

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(),脚本在触发器被检索之前结束。
我想知道我的错误在哪里(dbnedb)?
谢谢你

2exbekwf

2exbekwf1#

如果您遇到类似的问题,则会出现此问题,因为nedb不支持并发访问。
事实上,数据库文件已经被主程序打开,我正在通过批处理程序再次打开它。因此,db.find永远不会退出,因为该文件仍然被打开(由其他程序)。
我最后不得不导出get_triggers并通过API调用来调用它。

相关问题