Node.js中获取PostgreSQL监听事件的最后一条数据或仅执行一次
PostgreSQL监听器的两个需求解决方案
一、获取返回结果中的最后一条数据
你的监听器收到的data.payload解析后是包含所有修改行的数组,直接通过数组操作就能拿到最后一项:
pgsql_connection.query('LISTEN "whatsapp_listener"'); pgsql_connection.on("notification", function (data) { const modifiedRows = JSON.parse(data.payload); // 方式1:通过数组索引取最后一条 const lastRow = modifiedRows[modifiedRows.length - 1]; // 方式2:用slice方法(不修改原数组) // const lastRow = modifiedRows.slice(-1)[0]; console.log("最后一条修改的数据", lastRow); console.log('收到数据库通知!'); });
二、让监听器仅执行一次
有两种实用方式实现:
方式1:使用once绑定事件(推荐)
once方法会在事件触发一次后自动解绑监听器,无需手动处理:
pgsql_connection.query('LISTEN "whatsapp_listener"'); pgsql_connection.once("notification", function (data) { const modifiedRows = JSON.parse(data.payload); const lastRow = modifiedRows[modifiedRows.length - 1]; console.log("最后一条修改的数据", lastRow); console.log('收到数据库通知(仅执行一次)!'); });
方式2:手动解绑监听器
如果必须用on绑定,可在回调中手动移除监听(注意要使用命名函数,不能用匿名函数):
pgsql_connection.query('LISTEN "whatsapp_listener"'); function handleNotification(data) { const modifiedRows = JSON.parse(data.payload); const lastRow = modifiedRows[modifiedRows.length - 1]; console.log("最后一条修改的数据", lastRow); console.log('收到数据库通知(仅执行一次)!'); // 解绑当前监听器 pgsql_connection.off("notification", handleNotification); } pgsql_connection.on("notification", handleNotification);
内容的提问来源于stack exchange,提问作者Robert John Gajelomo
相关产品推荐
相关产品推荐

