下面的(简化的)示例最好地描述了我的问题:
给定一个异步 HTTP 客户端,该客户端Future< JSON >
在调用其 get-Method 时返回。给定一个资源链接,该资源又包含另一个资源的链接。那么我该如何编写以下代码:
- 对资源 A 执行 GET
- GET 完成后,立即对资源 B 执行 GET
我的具体问题是,如何从 Mapper 中返回 Future ,而 resourceB 不必是 type 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
返回 a Future
,而该Future#map
方法希望我传递一个映射器,该映射器从提供的值同步映射。
在Promises/A
JavaScript 世界中,我习惯于承诺处理程序能够将承诺返回到一个值或一个值。