我的问题最好由以下(简化)示例描述:
给定一个异步HTTP客户端,它对get-Method的调用返回Future< JSON >
。
给定到资源的链接,该资源又包含到另一个资源的链接。然后我如何编写以下代码:
我的具体问题是,如何在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
开始,我习惯于让处理程序能够将promise返回给值或值。
答案 0 :(得分:0)
我刚刚发现问题的答案就像使用flatMap而不是map一样简单。糟糕。