Я использую отличную библиотеку Cujo When, чтобы обеспечить реализацию Promises/A+ для моего узла. проект, хотя этот вопрос не зависит от узла.
Как правило, When великолепен: он позволяет мне писать более удобный и читаемый код.
Однако, когда мои обратные вызовы неожиданно терпят неудачу (доступ к свойству нулевой переменной и т. д.), исключения эффективно проглатываются, когда, как кажется, указан спецификацией 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-catches
- засорение кодовой базы "логами ориентиров" аля
console.log('I got here 123')
Я просто делаю это неправильно? Конечно, я не одинок в том, что не могу отлаживать код, основанный на промисах. Есть ли очевидное решение, которое мне не хватает?
when
конкретным решением ответа. - person Benjamin Gruenbaum   schedule 13.04.2014