दिलचस्प पोस्ट
स्ट्रिंग के लिए प्रतिस्थापन? बैक जोड़नेकरसंपूर्ण ईस्केपस Ios9 में एन्कोडिंग का उपयोग करना? फॉर्म जमा होने पर बटन सबमिट करें का मूल्य भेजें जावा से MySQL डाटाबेस बनाएँ सी में एक संरचना को दूसरे में निर्दिष्ट करें Xcode स्वचालित रूप से ब्रिजिंग हेडर नहीं बना रहा है? मैं दो छवियों के बीच समानता कैसे माप सकता हूं? वीबीए में क्लास का इस्तेमाल कब करना है? रनटाइम अपवाद: आपकी सामग्री में एक ListView होना चाहिए जिसका आईडी विशेषता 'android.r.id.list' है डेटा में योग्यता से पंक्ति को कैसे हटाया जाए? निर्भरता इंजेक्शन और सिंगलटन डिजाइन पैटर्न सरणी में अधिकतम और न्यूनतम मान का सूचकांक एक NumPy सरणी के प्रत्येक कक्ष में किसी फ़ंक्शन का कुशल मूल्यांकन कैसे java.lang.NumberFormatException को हल करने के लिए: इनपुट स्ट्रिंग के लिए: "N / A"? मैवेन: जीवनचक्र बनाम चरण बनाम प्लगइन बनाम गोल FacesContext.getCurrentInstance () Runnable वर्ग में शून्य रिटर्न

वादा डिस्पोजर पैटर्न क्या है?

मैंने कई स्थानों पर वादा डिस्पैसर पैटर्न के बारे में पढ़ा है, लेकिन मुझे पता नहीं है कि यह क्या है। मुझे उस कोड का उपयोग करने के लिए सुझाव दिया गया था, जो ऐसा दिखता है:

function getDb(){ return myDbDriver.getConnection(); } var users = getDb().then(function(conn){ return conn.query("SELECT name FROM users").finally(function(users){ conn.release(); }); }); 

वादा डिस्पोजर पैटर्न क्या है और यह यहां कैसे लागू होता है?


नोट – देशी वादों में, मैं शिम। .finally में "दोनों अस्वीकृति और पूर्ति संचालकों को जोड़ते हैं जो मान वापस लौटते हैं लेकिन कोई कार्य करते हैं"। अगर मैं मामला उठाता हूँ तो मैं इस मामले में ब्लूबर्ड का उपयोग कर रहा हूं।

Solutions Collecting From Web of "वादा डिस्पोजर पैटर्न क्या है?"

आपके कोड के साथ समस्या

उपरोक्त दृष्टिकोण के साथ समस्या यह है कि यदि आप हर बार जब आप getDb करते हैं तो कनेक्शन रिसाव को getDb हैं, तो आपके पास एक संसाधन रिसाव होता है, जो आपके ऐप को फ्रीज़ कर सकता है, जब वह संसाधन से बाहर निकलता है जो आप लीक कर रहे हैं।

आप एक ही स्थान पर ऐसा कर सकते हैं:

 var users = getDb().then(function(conn){ return conn.query("SELECT name FROM users"); }); 

कौन सा डाटाबेस कनेक्शन रिसाव करेगा जो कि कभी बंद नहीं हुआ था।


डिस्पोजर पैटर्न

डिस्पोजर पैटर्न संसाधन के स्वामी के साथ युगल को कोड का दायरा देता है। एक दायरे के लिए संसाधन बाध्य करके हम यह सुनिश्चित करते हैं कि यह हमेशा जारी रहता है जब हम इसे पूरा कर लेते हैं और हम इसे रिलीज करने के लिए आसानी से नहीं भूल सकते। यह सी # में, पायथन में और जावा के साथ-साथ-संसाधन के साथ-साथ सीए ++ में आरएआईआई के प्रयोग के समान है।

ऐसा लग रहा है:

  withResource(function(resource){ return fnThatDoesWorkWithResource(resource); // returns a promise }).then(function(result){ // resource disposed here }); 

इसे यहां लागू करना

यदि हमने अपना कोड लिखा है:

 function withDb(work){ var _db; return myDbDriver.getConnection().then(function(db){ _db = db; // keep reference return work(db); // perform work on db }).finally(function(){ if (_db) _db.release(); }); } 

हम अपना उपरोक्त कोड लिख सकते हैं:

  withDb(function(conn){ return conn.query("SELECT name FROM users"); }).then(function(users){ // connection released here }); 

डिस्प्लेर पैटर्न के उपयोगकर्ताओं के उदाहरणों का अनुक्रमण और knex (बुकशेल्फ की क्वेरी बिल्डर) हैं। उदाहरण के लिए सभी AJAX अनुरोधों को पूरा करने पर लोडर को छुपाने जैसी सरल चीज़ों के लिए इसका उपयोग करना भी संभव है।

Bluebird

चूंकि आप .disposer का उपयोग कर रहे हैं, इसलिए आपने Promise.using किया है कि आप एक ही समय में कई संसाधन लेना / जारी कर सकते हैं।