当前位置: 首页 > 知识库问答 >
问题:

Scala:拦截函数以向 Akka 期货提供隐式参数

杨景山
2023-03-14

好的,所以我对返回Akka Futures的函数进行了一系列调用,并且我通过使用flatMap和map将它们链接起来,如下所示:

doAsyncCall(..).flatMap { res1 =>
  doAsyncCall2(..).flatMap { res2 =>
    doAsyncCall3(..).map { res3 =>
      res
    }
  }
}

其可以分布在不同的函数调用中。现在,这些doAsyncCallX调用中的每一个都返回一个未来的[Result],我希望能够合成这些结果,在链上传递它们,直到最后我可以返回链中所有结果的合成结果。

为此,我考虑让每个doAsyncCallX接收前一个结果的隐式参数,并将获得的结果与前一个相结合。问题是,我看不到一种不使用隐式VAL的方法来实现这一点,如下所示:

doAsyncCall(..).flatMap { res1 =>
  implicit val implicitRes1 = res1
  doAsyncCall2(..).flatMap { res2 =>
    implicit val implicitRes2 = res2
    doAsyncCall3(..).map { res3 =>
      res
    }
  }
}

我想做的是能够截获平面图的应用程序,以确保之前的响应作为下一个doAsyncCallX调用的隐式参数正确传递。关于如何完成此操作的任何想法?

共有1个答案

濮嘉茂
2023-03-14

也许我遗漏了什么,但是有理由使用隐含词吗?

for(res1 <- doAsyncCall1(..);
    res2 <- doAsyncCall2(res1);
    res3 <- doAsyncCall3(res2)) yield(res3)

如果您需要返回由多个中间结果组成的结果,请更改yield以产生不同的结果,可能是一个元组,如< code>yield((res1,res2,res3))。其结果类似于< code>Future[(Result1,Result2,Result3)]

 类似资料:
  • 拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)

  • 拦截时间 bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数

  • 拦截窗口 bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本

  • 拦截注册表 bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健

  • 拦截消息框 bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框

  • 拦截驱动器 bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径