0

假设我有 1 个用于身份验证的指令。身份验证后,我想登录。这是我到目前为止所做的:

get(...) {
  myauthdirective() { v =>
     myloggingdirective(v) {
        ...
     }
  }
}

因此,我想将其转换为单个指令,而不是每次需要进行身份验证时都必须有 2 个。

我尝试使用平面地图,但这似乎不起作用,因为身份验证返回 Directive1 而 logRequestResponse 返回 Directive0。

// Does not work!
authenticate(myAuthMagnet).flatMap {
  case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca)))
}

所以我用地图尝试了它,但它似乎没有进入我的日志记录磁铁功能。

// Does not work either!
authenticate(myAuthMagnet).map {
  case ca: returnType => 
    logRequestResponse(LoggingMagnet(logme(ca))) // does not go into logme function for some reason
    ca
}

我也不能直接调用 logme 因为我也需要请求和响应对象。

有没有办法用 2 个返回不同指令类型的指令创建一个新指令?谢谢。

4

1 回答 1

2

您的实现中缺少一件小事。您需要在记录后提供值。所以实现应该是这样的:

authenticate(myAuthMagnet).flatMap {
  case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) & provide(ca)
}
于 2015-10-09T07:37:42.423 回答