2016-10-06 19 views
5

के साथ एसिंक अंतहीन पाश कैसे प्राप्त करें मुझे इसके अंदर वादे करने वाले "अंतहीन" होने की आवश्यकता है। यहाँ कुछ उदाहरण कोड है:वादे

let noErrorsOccured = true 

while (noErrorsOccured){ 
    someAsyncFunction().then(() => { 
     doSomething(); 
    }).catch((error) => { 
     console.log("Error: " + error); 
     noErrorsOccured = false; 
    }); 
} 

function someAsyncFunction() { 
    return new Promise ((resolve, reject) => { 
     setTimeout(() => { 
      const exampleBool = doSomeCheckup(); 
      if (exampleBool){ 
       resolve(); 
      } else { 
       reject("Checkup failed"); 
      } 
     }, 3000); 
    }); 
} 

तो यह है, जबकि लूप, अंतहीन चलाना चाहिए सिवाय एक त्रुटि तब होती है, तो थोड़ी देर के पाश बंद कर देना चाहिए। इसे कैसे प्राप्त किया जा सकता है?

मुझे आशा है कि आप समझ सकते हैं कि मैं क्या मतलब है और अग्रिम :) धन्यवाद

+1

वादा प्रतिक्रियाओं (बुला पूरा या अस्वीकृति हैंडलर) के कारण उन्हें पूरा कर लिया है निष्पादित करने के लिए एक एक धागा के बाद एसिंक्रोनस रूप से क्रियान्वित कर रहे हैं। पहला जबकि लूप एक अनंत ** अवरुद्ध ** लूप है, जो असीमित संख्या में वादे करता है जो कभी भी नहीं सुलझाया जाता है क्योंकि टाइमआउट कॉल बैक कभी नहीं होता है: डी _Possibly_ आप एक टाइमआउट या अंतराल टाइमर चाहते हैं जो पिछले वादे के 3 सेकंड बाद प्रतीक्षा करे एक और जांच चलाने से पहले एक एसिंक्रोनस चेक अप के लिए बनाया गया है? – traktor53

+0

समस्या यह है कि मुझे वास्तव में पता नहीं है कि मेरे वादे को हल करने में कितना समय लगता है, मैंने केवल अपने उदाहरण को स्पष्ट करने के लिए 'setTimeout() 'का उपयोग किया। लेकिन फ़ेलिक्स क्लिंग का समाधान पूरी तरह से काम करता है, इसलिए किसी अन्य समाधान की आवश्यकता नहीं है, लेकिन वैसे भी धन्यवाद :) – C4rmond4i

उत्तर

4

मैं यह कैसे प्राप्त कर सकते हैं?

अवरोधक लूप के साथ नहीं, क्योंकि वादे बसने में सक्षम नहीं होंगे। आप JavaScript's event loop on MDN के बारे में अधिक जान सकते हैं।

इसके बजाय, समारोह फिर से फोन जब वादा हल हो गई है:

Promise.resolve().then(function resolver() { 
    return someAsyncFunction() 
    .then(doSomething) 
    .then(resolver); 
}).catch((error) => { 
    console.log("Error: " + error); 
}); 
+0

यह भी काम करता है: पी –

+0

आह मैं पहले गड़बड़ कर चुका था। ओपीएस मूल कोड को पर्याप्त – Bergi

+0

पर नज़र डालें, यह कोड उस त्रुटि में "खाएगा", शायद इस मामले में ठीक है, लेकिन किसी भी '.catch ((err) => {}) के बारे में जानें एक 'फेंक गलती'; – kingdango

संबंधित मुद्दे