Могу ли я использовать asyn c fn в качестве обработчика в Rocket? - PullRequest
0 голосов
/ 20 апреля 2020

Я использую Rocket Framework и хочу сделать асинхронный c HTTP-запрос в моем обработчике, что-то вроде этого

#[get("/")]
async fn handler() -> String {
  some_func().await;
  "OK".into()
}

И в результате я получаю следующую ошибку

the trait `rocket::response::Responder<'_>` is not implemented for `impl core::future::future::Future`

Я пытался написать реализацию, но не смог. Есть ли способ реализовать trait для impl Trait?

Или, возможно, указать тип возвращаемого значения asyn c fn, чтобы я мог вернуть свой пользовательский тип с необходимыми реализованными чертами?

1 Ответ

0 голосов
/ 20 апреля 2020

Начиная с Rocket v0.4, все еще невозможно описать обработчики с использованием асинхронных функций c, хотя в будущем есть планы по переходу Rocket на полностью асинхронную среду (см. Проблему # 1065 ).

Пока эта миграция не завершена, невозможно эффективно обрабатывать фьючерсы в Rocket. Обходные пути могут включать добавление вашего собственного исполнителя и блокировку по завершению будущего, возникающего из обработчика (который определенно не получает столько преимуществ от asyn c, сколько мог бы).

...