setTimeout
, एक समारोह कॉल करने से पहले एक देरी कहते हैं जबकि async
/await
वादे के ontop वाक्यात्मक चीनी है, चेन कोड के लिए एक रास्ता एक कॉल पूर्ण होने के बाद चलाने के लिए है, इसलिए वे ' अलग अलग
setTimeout भयानक त्रुटि हैंडलिंग लक्षण है, इसलिए मैं सभी कोड में निम्नलिखित की सिफारिश:
let wait = ms => new Promise(resolve => setTimeout(resolve, ms));
और फिर setTimeout
सीधे फिर से फोन कभी नहीं।
आपका कोड अब हो जाता है: doSomething
समाप्त करने के लिए के लिए
let foo = async() => {
await wait(2000);
await this._doSomething();
}
foo
छोड़कर प्रतीक्षा करता है। यह आमतौर पर वांछनीय है, लेकिन संदर्भ के बिना यह जानना मुश्किल है कि आप क्या चाहते हैं। आप अन्य कोड के साथ समानांतर में doSomething
चलाने के लिए होती हैं, तो मेरा सुझाव है:
async() => { await Promise.all([foo(), this._otherCode()]); };
में शामिल होने और एक ही स्थान पर त्रुटियों पर कब्जा करने की।
आप वास्तव में आग और _doSomething
भूल जाते हैं और न इसके लिए इंतजार करने के लिए होती हैं, तो आप await
खो सकते हैं, लेकिन आप की कोशिश करनी चाहिए/कैच त्रुटियों:
async() => {
let spinoff = async() => { try { await foo(); } catch (e) { console.log(e); } };
spinoff(); // no await!
}
लेकिन मैं उस पैटर्न की सलाह नहीं देते, के रूप में यह सूक्ष्म है और याद करने में आसान हो सकता है।
_ "कोड ऐसा दिखता है" _ असंभव है, और यही कारण है कि आपको 'async' और' प्रतीक्षा 'नहीं हटा देना चाहिए। इस उदाहरण में इसका कोई मतलब नहीं है, लेकिन इसका मतलब यह नहीं है कि यह वास्तविक कोड में व्यर्थ है। – zeroflagL
यह थोड़ा अस्पष्ट है कि आप यहां क्या पूछ रहे हैं। कोड ** का टुकड़ा ** ** काम करने के लिए और कैसे 'async' और 'await' ** को हटा सकता है ** ** बदल सकता है? एक स्पष्ट प्रश्न के बिना जिसमें वास्तविक * उत्तर * है, आप बस बहुत व्यापक और राय सलाह प्राप्त कर रहे हैं। – noppa
मैंने इसे और स्पष्ट करने के लिए प्रश्न संपादित किया है कि मैं क्या हासिल करने की कोशिश कर रहा हूं। – Marta