Rust &引用;错误E0477:类型未满足所需的生存期;使用Actix Web处理程序

Rust &引用;错误E0477:类型未满足所需的生存期;使用Actix Web处理程序,rust,rust-actix,Rust,Rust Actix,我正在尝试使用Actix Web实现HTTP请求处理程序。以下是我的代码的相关部分: impl<S> Handler<S> for FooBarHandler { type Result = Box<Future<Item = HttpResponse, Error = Error>>; fn handle(&mut self, req : HttpRequest<S>) -> Self::Result

我正在尝试使用Actix Web实现HTTP请求处理程序。以下是我的代码的相关部分:

impl<S> Handler<S> for FooBarHandler {
    type Result = Box<Future<Item = HttpResponse, Error = Error>>;

    fn handle(&mut self, req : HttpRequest<S>) -> Self::Result {
        req.json().from_err().and_then(|foo : Foo|
            self.baz.qux(foo);
            Ok(HttpResponse::Ok().finish())
        }).responder()
    }
}
FooBarHandler的impl处理程序{ 类型结果=框; fn handle(&mutself,req:HttpRequest)->self::Result{ req.json()。从_err()和_then(|foo:foo| self.baz.qux(foo); Ok(HttpResponse::Ok().finish()) }).responder() } } 但是,我收到以下错误消息:

error[E0477]: the type  `mymod::futures::AndThen<mymod::futures::future::FromErr<mymod::actix_web::dev::JsonBody<mymod::actix_web::HttpRequest<S>, mymod::Foo>, mymod::actix_web::Error>, std::result::Result<mymod::actix_web::HttpResponse, mymod::actix_web::Error>, [closure@src/mymod.rs:53:40: 56:10 self:&&mut mymod::FooBarHandler]>` does not fulfill the required lifetime
  --> src/mymod.rs:56:12
   |
56 |         }).responder()
   |            ^^^^^^^^^
   |
   = note: type must satisfy the static lifetime
error[E0477]:类型'mymod::futures::AndThen'未满足所需的生存期
-->src/mymod.rs:56:12
|
56 |}).响应者()
|            ^^^^^^^^^
|
=注意:类型必须满足静态生存期

我完全不理解这个错误消息。代码实际上与相同,它不包含任何生命周期注释。

您在.中使用
self
,然后在.中使用未来,这违反了生命周期要求。

您在.中使用
self
,然后在.中使用未来,这违反了生命周期要求。

我应该如何避免这种情况?我尝试添加
让baz=self.baz.clone()
之前,然后
未来,然后用
baz
替换
self.baz
,但这会产生以下错误:
error[E0373]:闭包可能比当前函数寿命长,但它借用了当前函数所拥有的
baz
,进行克隆,然后将其移动到闭包中,
(移动|…{…})
我试过了,但我得到了以下错误:
参数类型“S”可能活得不够长
。编译器建议添加一个显式的生存期限制--
S:“static
,但这会导致错误,即无法在线程之间安全地共享该特性。我应该如何避免此错误?我尝试添加了
let baz=self.baz。克隆();
之前,然后
未来,然后将
self.baz
替换为
baz
,但这会产生以下错误:
错误[E0373]:closure可能比当前函数的寿命长,但它借用了当前函数所拥有的
baz
,进行克隆,然后将其移动到closure,
。然后(移动|…{…})
我试过了,但我得到了以下错误:
参数类型“S”可能活得不够长
。编译器建议添加一个显式的生存期限制--
S:“static
,但这会导致错误,即无法在线程之间安全地共享该特性。目前提出的问题与主题无关:问题搜索调试帮助(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。您没有提供
FooBarHandler
的定义,您没有显示什么板条箱(及其版本!)您正在导入,等等。事实上,您的代码在语法上是无效的。正如目前提出的,这个问题是离题的:寻求调试帮助的问题(“为什么这个代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。您没有提供
FooBarHandler
的定义,没有显示要导入的板条箱(及其版本!),等等。事实上,您的代码在语法上无效。