При отладке с помощью Chrome у отладчика есть некоторые тонкости для навигации по стеку вызовов необработанных исключений. Я начал использовать обещания Q, и теперь необработанные исключения по существу преобразуются в отклоненные обещания. Это нормально, за исключением случаев, когда дело доходит до отладки. Рассмотрим пример:
promise.done(do_work)
Любые исключения, сгенерированные в функции do_work, будут перехвачены Q, а затем сгенерированы как необработанные исключения в следующем такте. Проблема в том, что стек вызовов в отладчике Chrome скучен и просто представляет собой сброс Q. Это правда, что свойство стека исключения правильное, но это всего лишь всплывающая подсказка в отладчике Chrome, и ее использование раздражает.
Я пробовал такие вещи, как:
promise.done(do_work, function(e){throw e;})
Но эти исключения снова перехватываются Q; и, впрочем, это неважно, потому что к моменту, когда вы доберетесь до обработчика ошибок, стек будет уже со следующего тика. Я также пробовал играть с Q.onerror и другими, но у них та же проблема.
Есть ли способ заставить Q действительно игнорировать исключения для некоторых вызовов во время разработки, чтобы отладчик Chrome мог получить хороший исходный стек вызовов для работы, прежде чем Q перейдет к следующему такту процесса?
.fail()
(псевдоним.catch()
), который выполняет операторыconsole.log()
(или аналогичные) для отображения сообщений об ошибках по вашему выбору. - person Beetroot-Beetroot   schedule 24.12.2013.error()
, где она может быть обработана и/или повторно выдана. - person Beetroot-Beetroot   schedule 24.12.2013