假设我需要从我的方法返回一个承诺,这取决于外部资源和一些计算。我想象的是这样的:构建复杂的承诺
Promise<Integer> foo() {
return WS.url(url)
.getAsync()
.callWhenReady(new Function<HttpResponse>(){
Integer parse(HttpResponse response) {
// parsing business logic
// ...
int parsed = ...;
return parsed;
}
});
}
我可以用什么callWhenReady
?这基本上就像jQuery.promise()
的行为。
我想用另一种计算来编写WS承诺,并将构图作为新的未来返回。请参阅https://github.com/ripper234/BTCtoX/blob/d8af7fa07bfe7a0a33ce7e3899fde7ba4193ec2c/app/controllers/Application.java - “tobtc()”调用两个Web API。现在的缺点是每个API都不是完全异步的,并在等待WS HTTP调用时浪费一个工作线程。 – ripper234
东西必须监听这些WS HTTP调用,而在java中这是一个阻塞操作。我不认为play有任何其他机制可以解决这个问题,除此之外就是在单独的线程中完成它。正如我所看到的,如果你同时开始大量的工作,这只会是一个问题。 – aaberg
玩了WS.url(url).getAsync,我想用一个继续来执行我的代码。 Play已经完成了这项设计,以节省工作线程。 – ripper234