[英]Scala: Intercept functions to provide implicit parameters with Akka Futures
好的,所以我有一系列調用返回Akka Futures的函數,並且我通過使用flatMap和map來鏈接它們:
doAsyncCall(..).flatMap { res1 =>
doAsyncCall2(..).flatMap { res2 =>
doAsyncCall3(..).map { res3 =>
res
}
}
}
它可以分散在不同的函數調用中。 現在每個doAsyncCallX調用返回一個Future [Result],我希望能夠組合這些結果,將它們傳遞到鏈上,直到最后我可以返回鏈中所有結果的組合結果。
為此,我想到讓每個doAsyncCallX接收前一個結果的隱式參數,並將獲得的結果與前一個結果相結合。 問題是,我沒有看到這樣做的方法,而不會亂丟我的庫的使用與這樣的隱式val:
doAsyncCall(..).flatMap { res1 =>
implicit val implicitRes1 = res1
doAsyncCall2(..).flatMap { res2 =>
implicit val implicitRes2 = res2
doAsyncCall3(..).map { res3 =>
res
}
}
}
我想要做的是能夠攔截flatMap的應用程序,以確保先前的響應作為下一個doAsyncCallX調用的隱式參數正確傳遞。 有關如何實現這一點的任何想法?
也許我錯過了一些東西,但有沒有理由使用隱含的東西?
for(res1 <- doAsyncCall1(..);
res2 <- doAsyncCall2(res1);
res3 <- doAsyncCall3(res2)) yield(res3)
如果需要返回組成多個中間結果的結果,請更改yield以產生不同的結果,可能是一個元組,如yield((res1,res2,res3))
。 其結果將類似於Future[(Result1,Result2,Result3)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.