【发布时间】:2021-06-04 00:13:06
【问题描述】:
我搜索了很多,但还没有找到解决我问题的具体方法。 我有一个异步函数,它作为节点脚本轮询数据库,当使用节点 12 时该脚本将永远运行,但在 v14 中,实现发生了变化,它在运行一次后立即关闭。
(async function pollDatabase() {
const db = new Db();
return async.forever(async function (pollFn) {
const query = "SELECT * FROM templates WHERE data->>'isProcessed'='0' LIMIT 1;";
const templates = await db.query(query);
if (!templates || !templates.length) {
setTimeout(pollFn, 1000);
return;
}
await doSomethingWithTemplateAndReExecuteThisFunction(templates[0], pollFn);
});
})();
奇怪的是,例如一个快速服务器只是保持运行,但我还没有弄清楚它是如何工作的。我不打算将此后台脚本转换为服务器。关于什么是让它永远作为某种后台任务运行的最佳方法的任何想法?目前它是一个只包含这个脚本的 docker 容器。
【问题讨论】:
-
你考虑过使用PM2吗?
-
是的,我们过去使用过它,现在只使用一个总是重启的 docker 容器,但想法是它实际上永远不会停止并且每一秒都会轮询数据库。它工作得很好,但只有在使用 Node 12 时才可以,而在使用 Node 14 时就不行了
标签: node.js typescript asynchronous task