Как отладить код на основе обещаний в узле?

Я использую великолепную библиотеку Cujo When , чтобы обеспечить реализацию Promises / A + для моего проекта Node, хотя этот вопрос не является специфичным для узла.

В общем, когда здорово: это позволяет мне писать более понятный и читаемый код.

Однако, когда мои обратные вызовы неожиданно завершаются неудачно (доступ к свойству нулевой переменной и т. Д.), Исключения эффективно поглощаются Когда, как кажется, указано в спецификации Promises / A +. К сожалению, это означает, что я не получаю никакой обратной связи об ошибке (за исключением того, что обратный вызов останавливается в этот момент). Нет типа ошибки или сообщения, нет номера строки.

Чтобы проиллюстрировать:

// hypothetical asynchronous database query
database.query(queryDetails).then(function(result) {

  var silly = 3.141592654;
  silly(); // TypeError: number is not a function!

  process(result); // this code is silently never executed

});

Я могу придумать несколько (неприемлемых) способов решения этой проблемы:

  • предоставление обратных вызовов при каждом вызове then (для сбросить причину / исключение в консоль)
  • обернуть все тела обратного вызова в try-catch
  • , засоряя кодовую базу "арифметическими журналами" ala console.log('I got here 123')

Я просто делаю это неправильно? Конечно, я не одинок в том, что отлаживаемость кода, основанного на обещаниях, плохая. Есть ли очевидное решение, которое мне не хватает?

8
задан aaaidan 7 January 2014 в 21:58
поделиться