Исключение все еще находится в Отложенном. На данный момент возможны два результата:
- Вы можете добавить ошибку к отложенному. Как только вы это сделаете, он будет вызван с ошибкой, содержащей возникшее исключение.
- Вы можете разрешить Отложенному сборщик мусора (явно удалить
df
, либо вернуться из функции, либо потерять ссылку любым другим способом). Это вызывает код «Необработанная ошибка в отложенном».
Поскольку ошибка может быть добавлена к Отложенному в любое время (т. Е. По первому пункту выше), Отложенные не делают ничего с ошибками, которые в противном случае были бы обработаны. Они не знают, является ли ошибка действительно необработанной или просто необработанной. Только когда Deferred собирает мусор, он может быть уверен, что никто не будет обрабатывать исключение, поэтому он и регистрируется.
В общем, вы хотите быть уверены, что у вас есть ошибки на Отложенных, потому что иногда трудно предсказать, когда Отложенные будут собирать мусор. Это может занять много времени, а это означает, что может пройти много времени, прежде чем вы узнаете об исключении, если у вас нет собственного ошибочного ответа.
Это не должно быть ужасным бременем. Любой Deferred (a), который возвращается из обратного вызова на другой Deferred (b) (т. Е. Когда происходит цепочка), передает свои ошибки в b. Таким образом (а) не нужны дополнительные ошибки для регистрации и отчетности, только (б). Если у вас есть одна логическая задача, которая сложна и включает в себя много асинхронных операций, почти всегда случается так, что все Отложенные, участвующие в этих операциях, должны направлять свои результаты (успех или сбой) на одну главную Отложенную, которая представляет логическую операцию. Вам часто требуется только специальное поведение при обработке ошибок для одного Отложенного, и это позволит вам обрабатывать ошибки от любого из других вовлеченных Отложенных.