1
我有這個問題,我想打電話給未來的噴霧路由。下面我已經試過,我有工作在的onComplete斯卡拉期貨和方法回調使用噴霧路由
def sendFuture(input):Future[String]= Future {
//some string manipulation
result
}
post {
entity(as[String]) {
input =>
{
onComplete(sendFuture(input)) {
case Success(result) => {
complete("received: " + result)
}
case Failure(ex) => complete("An error occurred: " + ex.getMessage())
}
}
}
}
返回的未來價值現在,我現在想要做的更復雜的東西。我想要調用一個回調函數,它在sendFuture中接受一個參數,並在sendFuture將其返回給onComplete之前將該字符串返回給sendFuture。像下面這樣:
def sendFuture(input):Future[String]= Future {
//some string manipulation
callBack.call(
(arg:String)=>
{
//some string manipulation
return callBackResult
}
)
//do something with result based on callBackResult
result
}
post {
entity(as[String]) {
input =>
{
onComplete(sendFuture(input)) {
case Success(result) => {
complete("received: " + result)
}
case Failure(ex) => complete("An error occurred: " + ex.getMessage())
}
}
}
}
如果只有callBack.call()會返回一個字符串,但我是一個void/unit函數。
我不明白這部分的工作原理: 'callback.onComplete {情況下V => promise.complete(V)}' 在我的原代碼中的回調一個java類,它沒有「onComplete」方法。它唯一的方法是call(),它接受一個接受字符串但不返回任何內容的函數 – user3747998