使用pg-promise检查只读数据库可用性时调用报错问题排查
问题分析与解决
你的报错根源是getDb函数没有返回内部的Promise链,导致getDb()直接返回undefined,后续调用.oneOrNone()自然会抛出"Cannot read property 'oneOrNone' of undefined"的错误。
修复后的getDb函数
const getDb = () => { // 关键:return整个Promise链 return dbR .connect() .then(() => { return dbR; }) .catch(() => { return dbRW; }); };
正确调用方式
因为getDb()现在返回的是Promise,需要先等待它完成拿到数据库实例,再调用oneOrNone:
const db = await getDb(); await db.oneOrNone(sql);
或者直接链式调用:
await getDb().then(db => db.oneOrNone(sql));
补充说明
原函数中,.then()和.catch()里的return是针对Promise回调的,但外层函数getDb没有把整个Promise返回出去,所以外部拿到的是undefined而非Promise实例,也就无法用await处理或调用实例方法。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

