javascript - JavaScript 中无需 try 即可捕获并 promise

标签 javascript try-catch promise

我正在查看下面的代码块。我试图了解 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/

相关文章:

Javascript 方法以字符串形式返回方法代码

javascript - 对具有相同类的所有元素应用函数

c# - 如果 catch 中的代码失败会发生什么

javascript - 子组件之间的 Ember 触发 Action

javascript - 使用 Angular Directive(指令)在输入(类型=数字)中用逗号替换键盘句点

c# - try catch的用法

c# - 是否可以尝试/捕获整个 C# 程序?

jQuery,同时 ajax 调用和 $.when

javascript - 如何理解这段 Promise 代码?

javascript - 将从 Promise 返回的数据分配给变量对象