क्या नियंत्रक के बाहर प्रतीक्षा() तंत्र का उपयोग करने का कोई तरीका है?एसिंक्रोनस डब्ल्यूएस कॉल और प्रतीक्षा() एक नियंत्रक के बाहर
मैं नियंत्रक में एसिंक्रोनस कॉल बनाने के लिए कोड नहीं रखना चाहता, लेकिन इसके बजाय उस सेवा वर्ग में वह कोड है जिसे कई नियंत्रकों द्वारा पुन: उपयोग किया जा सकता है, हालांकि, नियंत्रक के बाहर प्रतीक्षा करने का कोई तरीका नहीं है विधि संरक्षित है।
तो नियंत्रक में उदाहरण के लिए:
ServiceClass service = new My ServiceClass();
MyObject myObject= service.getMeAnObject();
render(myObject);
और सेवा वर्ग:
public class ServiceClass
{
...
public MyObject getMeAnObject()
{
String url = "http://...";
Promise<HttpResponse> promise = url(url).getAsync();
// do something here similar to await in a controller
// that suspends the code waiting for the response
// to be retrieved
HttpResponse response = promise.get();
return buildMyObjectFromResponse(reponse);
}
...
}
वहाँ ऐसा ही कुछ प्राप्त करने के लिए कोई तरीका है?
आपकी मदद के लिए धन्यवाद।
संपादित: मैं पेरे की सलाह का पालन किया और सेवा वर्ग को लागू नियंत्रक बनाया है, यह फिर भी काम करता है, यह आवश्यक का उपयोग कर कि नियंत्रक यह बढ़ाया जा रहा है। ऐसा करने का एकमात्र तरीका यह है कि कॉल करने वाले नियंत्रक वर्ग में प्रतीक्षा विधि() के बाद कम से कम एक बार आह्वान किया जाता है।
हालांकि, मैंने अभी भी सत्यापित नहीं किया है कि कोड वास्तव में निलंबित कर दिया गया है।
संपादित करें 2: एक सुझाव मैं गूगल समूह से मिला है कि मैं वास्तव में कोशिश करते हैं और नियंत्रक का इंतजार करना चाहिए, तो शायद एक बेहतर समाधान सेवा एक वापस जाने के लिए के लिए होगा वादा करें और नियंत्रक इसके लिए प्रतीक्षा करें लेकिन फिर मेरे पास ऐसा करने का कोई तरीका नहीं है?
तो नियंत्रक में उदाहरण के लिए:
ServiceClass service = new My ServiceClass();
Promise<MyObject> promise = service.getMeAnObject();
MyObject myObject = await(promise);
render(myObject);
और सेवा वर्ग:
public class ServiceClass
{
...
public Promise<MyObject> getMeAnObject()
{
String url = "http://...";
// Somehow Build a Promise<MyObject>
}
...
}
}
आपके उत्तर के लिए धन्यवाद। ऐसा लगता है कि यह काम करता है। हालांकि, यह वास्तव में मेरी राय में सबसे अच्छा समाधान नहीं है, क्योंकि सेवा वर्ग अवधारणात्मक रूप से नियंत्रक नहीं है। आदर्श रूप से, कोड बाधा के इस तंत्र कहीं से भी उपलब्ध होगा। –