मेरे जीडब्ल्यूटी एप्लीकेशन में मैं अक्सर एक ही सर्वर परिणामों में कई बार refering कर रहा हूँ। मुझे यह भी नहीं पता कि कौन सा कोड पहले निष्पादित किया गया है। इसलिए मैं अपने एसिंक्रोनस (क्लाइंट-साइड) परिणामों के कैशिंग का उपयोग करना चाहता हूं।अमरूद के साथ जीडब्ल्यूटी में सर्वर परिणामों को कैसे कैश करें?
मैं मौजूदा कैशिंग लाइब्रेरी का उपयोग करना चाहता हूं; मैं guava-gwt पर विचार कर रहा हूं।
मैं (guava's documentation में) एक अमरूद तुल्यकालिक कैश के इस उदाहरण पाया:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
इस तरह मैं एक अमरूद कैश एसिंक्रोनस रूप (मैं के बारे में कोई सुराग नहीं कैसे करने के लिए है का उपयोग करने के कोशिश कर रहा हूँ है)
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
// I want to do something asynchronous here, I cannot use Thread.sleep in the browser/JavaScript environment.
service.createExpensiveGraph(key, new AsyncCallback<Graph>() {
public void onFailure(Throwable caught) {
// how to tell the cache about the failure???
}
public void onSuccess(Graph result) {
// how to fill the cache with that result???
}
});
return // I cannot provide any result yet. What can I return???
}
});
GWT डिफ़ॉल्ट JRE से कई वर्गों याद आ रही है (विशेष रूप से धागे और concurrancy के विषय में: यह काम कर रहे हैं)।
मैं एसिंक्रोनस परिणामों को कैश करने के लिए guava-gwt का उपयोग कैसे कर सकता हूं?
जो आप चाहते हैं वह कार्यान्वित करना मुश्किल नहीं है, यह सफलतापूर्वक कॉलबैक हैंडलर को 'फ्यूचर रीसेट' में जोड़ने के लिए है। मैं अपने विचार को प्रतिबिंबित करने के लिए एक स्रोत कोड उदाहरण अपडेट करूंगा। लेकिन आपको समझना चाहिए कि कॉलबैक को केवल पहले लोड पर एक बार बुलाया जाएगा (जिसे कैश किया जाएगा)। तो कॉलबैक के बाद '' result.isDone'' सत्य होगा। – Babl
इसके बजाय CompletableFuture देखें - यह वादा की तरह अधिक व्यवहार करता है, हालांकि अगर किसी भी अवरोध भविष्य के तरीकों का उपयोग करता है तो आपको अपवाद फेंकने की आवश्यकता होगी। –
@ColinAlworth GWT समर्थन 'CompletableFuture' करता है? – Babl