假設我需要從我的方法返回一個承諾,這取決於外部資源和一些計算。我想象的是這樣的:構建複雜的承諾
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