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
相关产品推荐
相关产品推荐

