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

Cloudflare Workers中使用pg-cursor遇setImmediate未定义的解决方法

解决Cloudflare Workers中pg-cursor的setImmediate未定义错误

方案一:添加setImmediate的Polyfill

Cloudflare Workers环境没有Node.js内置的setImmediateAPI,我们可以用Promise手动模拟这个功能,在代码最顶部添加以下polyfill:

// 为Cloudflare Workers环境polyfill setImmediate
globalThis.setImmediate = globalThis.setImmediate || ((callback, ...args) => {
  return Promise.resolve().then(() => callback(...args));
});

添加后再运行原有的pg-cursor代码即可正常工作,这个polyfill通过microtask模拟setImmediate的异步执行逻辑,能满足pg-cursor的需求。

方案二:改用pg原生的流式查询(无需pg-cursor)

如果不想依赖pg-cursor库,也可以直接使用pg官方提供的异步迭代器流式查询,避免对setImmediate的依赖:

const client = new Client(`<DATABASE URL>`);
await client.connect();

const resultStream = client.query(queryString);
const rows = [];
let fetchedCount = 0;

// 异步迭代获取前10行数据
for await (const row of resultStream) {
  rows.push(row);
  fetchedCount++;
  if (fetchedCount >= 10) break;
}

await client.end();

问题原因说明

pg-cursor库内部依赖Node.js的setImmediateAPI实现异步行数据推送,但Cloudflare Workers基于标准Web API构建,不包含Node.js特有的API,因此会抛出ReferenceError: setImmediate is not defined错误。上述两种方案分别通过补全缺失API和替换实现方式解决了这个兼容性问题。

内容的提问来源于stack exchange,提问作者Neil Middleton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:35:02