You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:25:22