0

我正在使用以下 actix 处理程序:

fn callback(info: web::Query<CallbackInfo>, session: Session) -> impl Future<Item = HttpResponse, Error = actix_web::Error>

在这个函数中,我做了一些分支,有时我会返回:

web::block(|| Result::<Backup, String>::Ok(run_backup(token_info)))
    .from_err()
    .map(|backup| HttpResponse::Ok().json(backup))

其他时候我回来:

let r = HttpResponse::Found()
    .set_header(http::header::LOCATION, "/")
    .finish();
futures::future::ok(r)

哪个无法编译

expected struct `futures::future::map::Map`, found struct `futures::future::result_::FutureResult`

我想我明白这一点,尽管这很奇怪,.map它不会返回另一个未来。但是我怎样才能统一这两个时间,以便我可以将它们用作返回类型?

更新:有人建议这是重复的:为什么 impl trait 不能用于返回多个/条件类型?但是那个问题并没有解决这个问题,它只是描述了为什么会发生这种情况。我看到问题出在 上impl Future,但我无法更改它,因为我使用的是 actix-web,它需要这个签名,或者我无法找到的类似签名,因此我问这个问题。

4

0 回答 0