我有一些代码可以打开并读取 SQL 脚本文件并并行打开与数据库的连接,当它们完成后,它会在连接上执行文件的内容。但是,连接结果需要“关闭”。我需要能够处理数据库连接成功并且读取文件失败(可能是错误的文件名)并且在任何一种情况下仍然关闭连接的情况。
这是我目前正在使用的代码,它有一个finally()
处理程序来在查询成功或失败时关闭客户端,但如果文件读取失败,客户端将不会关闭。
function execFile(db, file) {
console.log('Connecting to ' + db);
return Promise.all([
connect('postgres://' + credentials + host + '/' + db),
fs.readFileAsync(file, 'utf8')
]).spread(function(client, initSql) {
console.log('Connected to ' + db);
console.log('Running init script ' + file);
return client.queryAsync(initSql).finally(client.end);
});
}
我bind()
对将客户端传递到 finally 块的函数进行了一些操作,但我对它引入的复杂性不太满意。settle()
我有一种在这里可能有用的感觉,我现在正在玩这个。
处理这个问题的最佳方法是什么?