簡體   English   中英

Scala:攔截函數,用於為Akka Futures提供隱式參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM