Я смотрел ниже блок кода. Я пытаюсь понять, как может быть улов без блока try в javascript. Я понимаю, что есть обещание, но база данных создания находится в рамках обещания, и я понимаю, что у нас должен был быть блок try, окружающий client.queryAsync.Поймать без запроса в JavaScript и пообещать
Нижеприведенный код работает нормально, и я пытаюсь понять, как он работает без блока 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));
});
});
}
Это не настоящий блок try-catch, а метод, называемый 'catch', который предоставляется библиотекой обещаний. Настоящий блок try-catch выглядит как 'try {} catch (e) {}'. –
FYI: JavaScript допускает блоки 'try-finally' (без' catch'). –
related: [Является ли метод «catch» имени JS Promises/A + недействительным, так как это ключевое слово JS?] (Http://stackoverflow.com/q/25774628/1048572) – Bergi