从 akka 映射器返回未来

Posted

技术标签:

【中文标题】从 akka 映射器返回未来【英文标题】:Returning a Future from an akka Mapper 【发布时间】:2013-04-29 06:46:06 【问题描述】:

下面的(简化的)示例最好地描述了我的问题:

给定一个异步 HTTP 客户端,它在调用其 get 方法时返回 Future< JSON >。 给定一个指向某个资源的链接,该链接又包含指向另一个资源的链接。那么我该如何编写以下代码:

对资源 A 执行 GET GET 完成后,立即对资源 B 执行 GET

我的具体问题是,如何从 Mapper 中返回 Future,而不需要 resourceB 的类型为 Future< Future < JSON > >。基本上,我想写的是以下内容:

Future< JSON > resourceA = httpClient.get( "http://..." );
Future< JSON > resourceB = resourceA.map( new Mapper< JSON, Future< JSON > >() 
     public JSON apply( JSON resourceARepr )
     
        return httpClient.get( resourceARepr.getString( "linkToResourceB" ) );
     
 );

但是,这不会编译,因为 httpClient#get 返回一个 Future,而 Future#map 方法希望我传递一个映射器,该映射器从提供的值同步映射。

javascript 世界中的Promises/A 开始,我习惯于承诺处理程序能够将承诺返回到一个值或一个值。

【问题讨论】:

【参考方案1】:

我刚刚发现我的问题的答案就像使用 flatMap 而不是 map 一样简单。哎呀。

【讨论】:

以上是关于从 akka 映射器返回未来的主要内容,如果未能解决你的问题,请参考以下文章

设备映射器,使用虚拟设备启动

如果映射器在中途失败并且 Hadoop 重试该映射器,自定义计数器会发生啥

在猪中增加映射器

从文件中为hadoop中的映射器创建自定义键值

Mybatis映射器select

MyBatis映射器总结