Node.js Heroku计划程序未在部署的应用程序上运行异步操作
我正在尝试使用Heroku Scheduler设置一个服务,以便在worker.js文件中运行一个函数,每小时从数据库中删除旧数据。在使用“heroku run worker”部署它之后,当我在命令行上测试它时,我只会记录“STARTED”。因此,函数被执行了,但它在到达wait时立即挂起,最终刚刚结束。在本地执行函数时,它工作正常 这是我的worker.js:Node.js Heroku计划程序未在部署的应用程序上运行异步操作,node.js,heroku,psql,Node.js,Heroku,Psql,我正在尝试使用Heroku Scheduler设置一个服务,以便在worker.js文件中运行一个函数,每小时从数据库中删除旧数据。在使用“heroku run worker”部署它之后,当我在命令行上测试它时,我只会记录“STARTED”。因此,函数被执行了,但它在到达wait时立即挂起,最终刚刚结束。在本地执行函数时,它工作正常 这是我的worker.js: const db = require("./db"); const deleteOldData = async
const db = require("./db");
const deleteOldData = async () => {
let twoDaysAgoUTC = new Date(Date.now() - 2 * 24 * 60 * 60 * 1000);
twoDaysAgoUTC.toUTCString();
console.log("STARTED") <- only this line gets logged
await db.query(
`DELETE FROM chat_messages WHERE timestamp < $1`,[twoDaysAgoUTC]
);
await db.query(
`DELETE FROM guests
WHERE group_chat_id IN (
SELECT group_chat_id FROM group_chats
WHERE timestamp < $1
)`,[twoDaysAgoUTC]
);
await db.query(
`DELETE FROM group_chats WHERE timestamp < $1`,[twoDaysAgoUTC]
);
console.log("FINISHED")
}
deleteOldData();
process.exit();
const db=require(“./db”);
const deleteOldData=async()=>{
设twoDaysAgoUTC=新日期(Date.now()-2*24*60*60*1000);
twoDaysAgoUTC.toutString();
console.log(“STARTED”)代码中有一个关于同步和异步代码的基本问题。
当您调用deleteOldData()时,它将异步运行,不会等到执行完成,而是继续执行process.exit(),这将在不完成任务的情况下终止进程
解决方案是在deleteOldData函数的末尾调用exit命令
const db = require("./db");
const deleteOldData = async () => {
let twoDaysAgoUTC = new Date(Date.now() - 2 * 24 * 60 * 60 * 1000);
twoDaysAgoUTC.toUTCString();
console.log("STARTED") <- only this line gets logged
await db.query(
`DELETE FROM chat_messages WHERE timestamp < $1`,[twoDaysAgoUTC]
);
await db.query(
`DELETE FROM guests
WHERE group_chat_id IN (
SELECT group_chat_id FROM group_chats
WHERE timestamp < $1
)`,[twoDaysAgoUTC]
);
await db.query(
`DELETE FROM group_chats WHERE timestamp < $1`,[twoDaysAgoUTC]
);
console.log("FINISHED");
process.exit();
}
deleteOldData();
const db=require(“./db”);
const deleteOldData=async()=>{
设twoDaysAgoUTC=新日期(Date.now()-2*24*60*60*1000);
twoDaysAgoUTC.toutString();
console.log(“已启动”)