2014-12-11 3 views
0

Я смотрел ниже блок кода. Я пытаюсь понять, как может быть улов без блока 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)); 
     }); 
    }); 
} 
+4

Это не настоящий блок try-catch, а метод, называемый 'catch', который предоставляется библиотекой обещаний. Настоящий блок try-catch выглядит как 'try {} catch (e) {}'. –

+0

FYI: JavaScript допускает блоки 'try-finally' (без' catch'). –

+1

related: [Является ли метод «catch» имени JS Promises/A + недействительным, так как это ключевое слово JS?] (Http://stackoverflow.com/q/25774628/1048572) – Bergi

ответ

0

Найден ответ, catch используется здесь не является ключевым словом, это .catch обертки функция обещания и может быть использовано, чтобы поймать любое исключение, которое произойдет в .then блоке.

Смежные вопросы