Я использую конструктор Future.failed для создания неудавшегося будущего, но неудачное будущее по-прежнему выдает исключение, когда я думаю, что этого не должно быть.
Метод session.loadAll вызывает исключение.
Я также использую Play Framework
Я использую конструктор Future.failed для создания неудавшегося будущего, но неудачное будущее по-прежнему выдает исключение, когда я думаю, что этого не должно быть.
Метод session.loadAll вызывает исключение.
Я также использую Play Framework
Я думаю, что Future.failed
не генерирует исключение. Похоже, что это так, потому что трассировка стека генерируется в том месте, где создается исключение.
Таким образом, если вы используете такой метод, как Await.result
, или другой метод, который предполагает, что будущее успешно, вы увидите повторное создание исключения, но трассировка стека заставит его выглядеть так, как если бы оно было создано. в Future.failed
.
Await.result
обычно не рекомендуется, так как это блокирующий вызов. Если блокировка не требуется, Future.onComplete
или Future.onFailure
будут следовать асинхронному шаблону и будут такими же или лучше. docs.scala-lang.org/overviews/core/futures.html далее поясняет, почему это плохая идея
- person pgoggijr; 01.04.2016
Во-первых, я не совсем понимаю, почему вы используете здесь будущее, потому что это не похоже на асинхронные вызовы.
Однако, чтобы ответить на ваш вопрос, я не совсем уверен, что здесь происходит, но похоже, что вам нужно обработать исключение. Потребитель будущего должен использовать либо Future.onComplete
и сопоставление шаблона с типом сбоя, либо Future.onFailure
и сопоставление шаблона для типов Throwable.
Документация по Scala Future: http://docs.scala-lang.org/overviews/core/futures.html
loadAll
выдает исключение, ОК, сопоставление с образцом перехватывает его, ОК, затем вы возвращаете еще одинFuture.failed
, заключающий в себе новыйException
, ОК. В чем проблема? И что со скринами? - person slouc   schedule 01.04.2016Future.failed(new Exception())
определенно не та, которая вызывает исключение. Что-то еще есть. Возможно, часть, использующая результатgetThings
, не ожидает неудачного будущего (хотя я не уверен, почему в этом случае компилятор выводит исключение в строке 44). В моем комментарии к снимкам экрана говорилось, что вы всегда должны публиковать фрагменты кода, а не изображения. - person slouc   schedule 01.04.2016