Comments 10
Ну вы бы хоть больше о Future рассказали. А что произойдет, если вдруг выскочит Exception во Future?
Future[U] — это часть Scala API, а не Play
Вот статься, которая расскажет о Future[U] docs.scala-lang.org/overviews/core/futures.html
А вообще ставлю Вам плюс, за попытку популяризации такого замечательного фреймворка. И хотелось бы добавить, что не смотря на такой юный возвраст, на Play Framework уже работает LinkedIn и куча других очень популярных приложений.
Future[U] — это часть Scala API, а не Play
Вот статься, которая расскажет о Future[U] docs.scala-lang.org/overviews/core/futures.html
А вообще ставлю Вам плюс, за попытку популяризации такого замечательного фреймворка. И хотелось бы добавить, что не смотря на такой юный возвраст, на Play Framework уже работает LinkedIn и куча других очень популярных приложений.
+4
«И этот вариант работает хорошо, пока код выполняется верно. Но от ошибок при выполнении не застрахован никто, а если ошибка случится в блоке кода, выполняющемся асинхронно, она может привести к тому, что результат так и не будет сформирован. А это значит, что пользователь не получит ответа и его браузер останется в ожидании пока он, наконец, не закроет вкладку. Избежать этого, однако, довольно просто: каждому обещанию (то есть Future[Result]) можно поставить тайм-аут: если в течение этого времени мы не получим реальный результат — будет сформирована ошибка»
Разве не логичнее вызывать callback в случае ошибки с соответствующим результатом (код ошибки и т.п.)?
Таймаут тоже можно добавить, конечно, но ошибки все же надо обрабатывать.
+2
Future[U] вернет Try[U]. И там на выбор будет либо инстанс исключения, либо результат. Ошибки в любом случае нужно обрабатывать
0
стоп стоп стоп
когда это Future возвращает Try?
обработка исключений идет через recover
когда это Future возвращает Try?
обработка исключений идет через recover
0
У инстанса Future есть метода onComplete который принимает функцию, которая принимает Try как параметр. Если Future обработал корректно — будет Success, если нет — Failure. Это, наверное, самый правильный способ работать с Future.
Еще есть метода onSuccess и onFailure.
Можно здесь почитать
UPD: хотя recover тоже круто
Еще есть метода onSuccess и onFailure.
Можно здесь почитать
UPD: хотя recover тоже круто
0
И все же, в контексте использования Future внутри async блоков фреймворка необходимо возвращать значение Future[SimpleResult], а onSuccess, onComplete и иже с ними вернут Unit. Поэтому map-recover тут более уместен. Можно, конечно, извратиться с промисами, но зачем?
+1
Но ведь все это есть в официальной документации. Причем, всего пара страниц.
0
Да кстати, в случае с play framework без асинхронизма далеко не уйдешь. Oн ведь крутится на netty, а этот товарищ по архитектуре существенно отличается от классического j2ee сервлет контейнера.
0
Sign up to leave a comment.
Асинхронный HTTP в Play Framework