假设我有1个身份验证指令。经过身份验证后,我想登录。这是我到目前为止所做的:
get(...) {
myauthdirective() { v =>
myloggingdirective(v) {
...
}
}
}
因此,我想将其转换为单个指令,而不是每次需要进行身份验证时都必须拥有2个指令。
我尝试使用平面地图,但这似乎不起作用,因为authenticate返回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个指令创建一个返回不同指令类型的新指令?谢谢。
答案 0 :(得分:2)
您的实施中缺少一件小事。您需要在记录后提供值。所以实现应该是:
authenticate(myAuthMagnet).flatMap {
case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) & provide(ca)
}