Promise.all([iterable])要么全有,要么全无,这意味着当可迭代中的每个 Promise 解析时,它返回的 Promise 都会解析,或者一旦其中一个 Promise 拒绝,它就会拒绝,原因是第一个 Promise 拒绝 ( doc)。
但是如果可迭代拒绝的多个承诺会发生什么?
在 VSCode 中,我尝试了以下示例,并故意使foo()和bar()承诺失败。当我在 VSCode 中调试时,我在 * catch(err => Promise.reject('error query bar()'))* 上收到错误,说发生了异常,但我不明白为什么。
我认为这是因为当我调用 Promise.reject 时,Promise.all 已经收到来自 foo 函数的拒绝,该函数也失败了,但不清楚发生了什么。
如果我在调试选项中禁用“未捕获的异常”断点,则异常将不再显示。
这里到底发生了什么?
function foo() {
return pool.query('insert_test into test (value) values (20)')
.then(() => client.query('insert into test (value) values (21)'))
.catch(err => Promise.reject('error query bar()'))
}
function bar() {
return pool.query('insert_test into test (value) values (20)')
.then(() => client.query('insert into …Run Code Online (Sandbox Code Playgroud) 阅读文档后:https : //github.com/brianc/node-pg-pool,我有点担心重用该new Pool()方法。
文档建议我需要像这样放置new Pool()beforeexports和return它
// db.js
const pool = new Pool();
module.exports = () => { return pool; }
Run Code Online (Sandbox Code Playgroud)
这样我就可以重用,Pool直到idleTimeoutMillis或client.release(),通过使用require()其他文件,例如:
const connect = require('./db')
connect().query(' .... ');
Run Code Online (Sandbox Code Playgroud)
如果这是正确的,它是如何工作的?node.js 是否缓存new Pool(), 因为它不在里面module.exports?
目前,我们的 api(部署在 cloudRun 上)通过传入带有数据库配置以及数据库用户和密码的 pgConfig 来连接到我们的 Postgres 数据库。
例如:
const configObject = {
host: cloudRunHost,
user: dbUser,
password: dbPassword,
database: dbName
}
async function connect() {
if(!client) {
const pgPool = new pg.Pool(configObject);
await pgPool.connect()
.then((result) => {
logger.info('Connected to DB')
client = result;
}).catch((err) => {
logger.error(err);
});
}
}
Run Code Online (Sandbox Code Playgroud)
我们希望应用本身使用Cloud SQL IAM 数据库身份验证连接到数据库
迄今为止:
error: empty password returned by client我们尝试从 configObject 中完全删除密码行,但没有帮助。关于为什么我的服务帐户可以直接访问数据库但 …
postgresql google-cloud-sql google-cloud-platform google-iam node-pg-pool