ऐसा इसलिए है क्योंकि save
वास्तव में एक I/O ऑपरेशन है जो Async है। अब, for
लूप वास्तव में सिंक है। इसके बारे में इस तरह से सोचें:आपका जेएस इंजन प्रत्येक पंक्ति को देखता है जो इसे देखता है। मान लें कि इन पंक्तियों को एक के बाद एक ढेर पर रखा गया है। जब save
. की बात आती है , यह इसे एक अलग स्टैक पर एक तरफ रखता है (क्योंकि यह एक I/O ऑपरेशन है, और इस प्रकार समय लगेगा) और बाकी लूप के साथ आगे बढ़ता है। ऐसा पता चलता है कि इंजन इस नए स्टैक की जाँच तभी करेगा जब उसने पुराने पर हर लाइन को पूरा कर लिया हो। इसलिए, वेरिएबल cats
. का मान सरणी में अंतिम आइटम होगा। इस प्रकार, केवल अंतिम मान सहेजा जाता है।
इस त्रासदी से लड़ने के लिए आप कई तरीकों का इस्तेमाल कर सकते हैं:
- क्लोजर - और पढ़ें
- आप इस तरह बंद कर सकते हैं:
cats.forEach()
- आप इस तरह बंद कर सकते हैं:
- वादे - और पढ़ें . एक स्वीट लाइब्रेरी है जो मोंगो चालक के साथ काम करना आसान बनाने का वादा करता है।
- जनरेटर, आदि - और पढ़ें . अभी प्राइमटाइम के लिए तैयार नहीं है।
<उप>#2 के बारे में नोट - मैं परियोजना का योगदानकर्ता नहीं हूं, लेकिन लेखक के साथ काम करता हूं। मैं पिछले एक साल से अधिक समय से पुस्तकालय का उपयोग कर रहा हूं, और यह तेज़ और शानदार है!