簡體   English   中英

不用JavaScript就可以嘗試並承諾

[英]Catch without try in JavaScript and promise

我在看下面的代碼塊。 我試圖了解沒有javascript中的try塊怎么會有一個陷阱。 我知道使用了一個Promise,但是create數據庫在Promise之內,我的理解是我們應該在try.block周圍有一個client.queryAsync。

下面的代碼工作正常,我試圖理解沒有try塊的工作方式。 我還閱讀了http://know.cujojs.com/tutorials/async/mastering-async-error-handling-with-promises,但該鏈接還顯示了正在使用的try塊。

誰能解釋一下。 提前致謝

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不是關鍵字,它是.catch包裝函數,可用於捕獲.then塊內發生的任何異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM