एक एसिंक कॉल है जो मैं सेवा पर किसी डेटाबेस पर क्वेरी कर रहा हूं, लेकिन इस सेवा की एक सीमा है कि यह कितनी बार आउटपुट कर सकती है, इसलिए मुझे यह जांचने की ज़रूरत है कि क्या यह परिणाम भेजता है और दोहराता है क्वेरी जब तक यह नहीं करता है।लूप के अंदर async फ़ंक्शंस का पदानुक्रम कॉल करें?
तुल्यकालिक mockup:
var query_results = [];
var limit_hit = true; #While this is true means that the query hit the record limit
var start_from = 0; #Pagination parameter
while (limit_hit) {
Server.Query(params={start_from : start_from}, callback=function(result){
limit_hit = result.limit_hit;
start_from = result.results.length;
query_result.push(result.results);
}
}
जाहिर है ऊपर काम नहीं करता, मैं इस मुद्दे के बारे में कुछ अन्य प्रश्न यहाँ देखा है, लेकिन वे जब आप प्रत्येक यात्रा की जरूरत के लिए इंतजार करना क्या करना है का उल्लेख नहीं है आखिरी वाला खत्म करने के लिए और आप हाथ से पहले पुनरावृत्तियों की संख्या नहीं जानते हैं।
मैं उपरोक्त एसिंक्रोनस कैसे बदल सकता हूं? मैं वादे/स्थगित-जैसे तर्क का उपयोग करके जवाब देने के लिए खुला हूं, लेकिन अधिमानतः कुछ साफ है।
मैं शायद प्रतीक्षा/टाइमआउट का उपयोग करके ऐसा करने का एक भयानक और भयानक तरीका सोच सकता हूं, लेकिन इसे हल करने के लिए एक साफ, चालाक और आधुनिक तरीका होना चाहिए।
एक और तरीका हाथ से पहले सुविधाओं की संख्या जानने के लिए "पूर्व-क्वेरी" बनाना है ताकि आप लूप की संख्या जान सकें, मुझे यकीन नहीं है कि यह सही तरीका है या नहीं।
यहाँ हम डोजो कभी कभी उपयोग करें, लेकिन उदाहरण मैंने पाया कि क्या करना है की व्याख्या नहीं करता है जब आप छोरों https://www.sitepen.com/blog/2015/06/10/dojo-faq-how-can-i-sequence-asynchronous-operations/
लूप के बजाय एक पुनरावर्ती दृष्टिकोण का उपयोग करें। यह वादे के साथ स्वाभाविक रूप से बह जाएगा। – Bergi