我正在查看下面的代码块。我试图了解 JavaScript 中如何在没有 try block 的情况下进行捕获。我知道正在使用一个 promise ,但创建数据库是在 promise 内,我的理解是我们应该有围绕 client.queryAsync 的 try block 。
下面的代码工作正常,我试图了解它在没有 try block 的情况下如何工作。我还读过http://know.cujojs.com/tutorials/async/mastering-async-error-handling-with-promises但该链接还显示正在使用 try block 。
谁能解释一下。提前致谢
function init(dbName) {
return util.serialize('Open database', function () {
return connect(maintenanceDbName).then(function (client) {
return client.queryAsync('CREATE DATABASE ' + dbName + ' TEMPLATE=template0 ENCODING=\'UTF8\' LC_COLLATE=\'C\' LC_CTYPE=\'C\';').catch(function (err) {
// Already created previously, which is fine
if (err.message.indexOf('already exists') < 0) {
throw err;
}
}).finally(function () {
return closeDatabase(client);
});
}).then(function () {
return connect(dbName);
}).then(function (client) {
db = client;
return fs.readFileAsync(path.join(__dirname, 'postgresql.sql'), 'utf8').then(db.queryAsync.bind(db));
});
});
}
最佳答案
找到答案了,这里使用的catch
不是关键字,它是promise的.catch
包装函数,可用于捕获发生在其中的任何异常.then
block 。
关于javascript - JavaScript 中无需 try 即可捕获并 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27413715/