मैं एक जावास्क्रिप्ट प्रोग्राम को इसके निष्पादन के कुछ विशेष बिंदुओं में प्रतीक्षा करने के लिए बाध्य करना चाहता हूं जब तक कोई चर बदल नहीं जाता है। क्या इसे करने का कोई तरीका है? मुझे पहले से ही एक एक्सटेंशन मिला है जिसे "कथा जावास्क्रिप्ट" कहा जाता है जो कार्यक्रम को तब तक इंतजार करने के लिए मजबूर करता है जब तक कोई घटना न हो। क्या कोई नया कार्यक्रम बनाने का कोई तरीका है, उदाहरण के लिए "वेरिएबल चेंज इवेंट" उदाहरण के लिए ऑनक्लिक ईवेंट की तरह व्यवहार करता है ..जावास्क्रिप्ट में परिवर्तनीय परिवर्तन के लिए मैं प्रोग्राम कैसे इंतजार कर सकता हूं?
उत्तर
नहीं, आपको अपना स्वयं का समाधान बनाना होगा। पर्यवेक्षक डिजाइन पैटर्न या कुछ का उपयोग करने की तरह।
यदि आपके पास चर पर कोई नियंत्रण नहीं है या इसका उपयोग कौन कर रहा है, तो मुझे डर है कि आप बर्बाद हो गए हैं। संपादित करें: या स्किलड्रिक के समाधान का उपयोग करें!
माइक
एक त्वरित और आसान समाधान इस प्रकार है:
var something=999;
var something_cachedValue=something;
function doStuff() {
if(something===something_cachedValue) {//we want it to match
setTimeout(doStuff, 50);//wait 50 millisecnds then recheck
return;
}
something_cachedValue=something;
//real action
}
doStuff();
मैं एक आवरण मूल्य बदला जा रहा संभाल लेंगे कि सिफारिश करेंगे। उदाहरण के लिए आप जावास्क्रिप्ट कार्य हो सकता है, इस तरह:
function Variable(initVal, onChange)
{
this.val = initVal; //Value to be stored in this object
this.onChange = onChange; //OnChange handler
//This method returns stored value
this.GetValue = function()
{
return this.val;
}
//This method changes the value and calls the given handler
this.SetValue = function(value)
{
this.val = value;
this.onChange();
}
}
और फिर आप इसे से बाहर एक वस्तु है कि मूल्य है कि आप की निगरानी करना चाहते, और यह भी एक समारोह का आयोजन करेगा कि जब मूल्य हो जाता है बुलाया जाएगा बना सकते हैं बदला हुआ। उदाहरण के लिए, आपको सूचित किया करने के लिए मूल्य में परिवर्तन, और प्रारंभिक मूल्य 10 जब चाहते हैं, तो आप कोड को इस प्रकार लिख होगा:
var myVar = new Variable(10, function(){alert("Value changed!");});
हैंडलर function(){alert("Value changed!");}
बुलाया जाएगा (यदि आप कोड को देखो) जब SetValue()
है बुलाया।
तुम इतनी तरह मूल्य प्राप्त कर सकते हैं:
alert(myVar.GetValue());
तुम इतनी तरह मान सेट कर सकते हैं:
myVar.SetValue(12);
और तुरंत बाद, एक चेतावनी स्क्रीन पर दिखाया जाएगा। देखें कि यह कैसे काम करता है: http://jsfiddle.net/cDJsB/
उत्तर के लिए धन्यवाद, लेकिन यह वही नहीं है जो मैं चाहता हूं। कृपया मेरी टिप्पणी को एकुलरॉन पर देखें! –
जावास्क्रिप्ट दुभाषिया एकल थ्रेडेड हैं, इसलिए एक चर कभी नहीं बदल सकता है, जब कोड किसी अन्य कोड में प्रतीक्षा कर रहा है जो परिवर्तनीय नहीं बदलता है।
मेरी राय में यह किसी प्रकार की ऑब्जेक्ट में चर को लपेटने का सबसे अच्छा समाधान होगा जिसमें गेटर और सेटर फ़ंक्शन है। फिर आप उस ऑब्जेक्ट में कॉलबैक फ़ंक्शन पंजीकृत कर सकते हैं जिसे ऑब्जेक्ट के सेटटर फ़ंक्शन कहा जाता है।
function Wrapper(callback) {
var value;
this.set = function(v) {
value = v;
callback(this);
}
this.get = function() {
return value;
}
}
यह आसानी से इस तरह इस्तेमाल किया जा सकता: फिर आप वर्तमान मूल्य को पुनः प्राप्त करने कॉलबैक में गेटर समारोह का उपयोग कर सकते
Object.defineProperty MDN documentation:
<html>
<head>
<script type="text/javascript" src="wrapper.js"></script>
<script type="text/javascript">
function callback(wrapper) {
alert("Value is now: " + wrapper.get());
}
wrapper = new Wrapper(callback);
</script>
</head>
<body>
<input type="text" onchange="wrapper.set(this.value)"/>
</body>
</html>
यदि आप मूल चर पर नियंत्रण प्राप्त कर चुके हैं तो शायद सबसे अच्छा समाधान। – Skilldrick
उत्तर के लिए धन्यवाद, लेकिन यह वही नहीं है जो मैं चाहता हूं। कृपया मेरी टिप्पणी को एकुलरॉन पर देखें! –
जैसा कि मैंने समझाया जावास्क्रिप्ट दुभाषिया एकल थ्रेडेड हैं। आप धागे को अवरुद्ध नहीं कर सकते हैं और किसी अन्य धागे को एक चर बदलने के लिए प्रतीक्षा कर सकते हैं, क्योंकि कोई अन्य धागा नहीं है जो एक चर बदल सकता है। कोई जावास्क्रिप्ट इवेंट हैंडलर निष्पादित नहीं किया जा सकता है जबकि दूसरा पहले ही निष्पादित हो रहा है। – Reboot
आप गुण उपयोग कर सकते हैं
उदाहरण:
function def(varName, onChange) {
var _value;
Object.defineProperty(this, varName, {
get: function() {
return _value;
},
set: function(value) {
if (onChange)
onChange(_value, value);
_value = value;
}
});
return this[varName];
}
def('myVar', function (oldValue, newValue) {
alert('Old value: ' + oldValue + '\nNew value: ' + newValue);
});
myVar = 1; // alert: Old value: undefined | New value: 1
myVar = 2; // alert: Old value: 1 | New value: 2
- 1. मैं समांतर तक कैसे इंतजार कर सकता हूं। फॉरएच
- 2. संशोधन/परिवर्तन के लिए मैं "फाइल" कैसे देख सकता हूं?
- 3. मैं गिट सबमिशन में परिवर्तन कैसे कर सकता हूं?
- 4. मैं प्रतिबिंबित डेटाबेस में स्कीमा परिवर्तन कैसे कर सकता हूं?
- 5. मैं% ENV में परिवर्तन कैसे प्राप्त कर सकता हूं?
- 6. पर्ल में प्रवेश के इंतजार किए बिना मैं उपयोगकर्ता इनपुट कैसे प्राप्त कर सकता हूं?
- 7. मैं केवल subrepo के परिवर्तन कैसे कर सकता हूं?
- 8. मैं जावास्क्रिप्ट में गोटो का उपयोग कैसे कर सकता हूं?
- 9. मैं MATLAB में एक जीयूआई कैसे प्रोग्राम कर सकता हूं?
- 10. सेलेनियम 2/वेबड्राइवर का उपयोग करके मैं जावास्क्रिप्ट अलर्ट का भरोसेमंद इंतजार कैसे कर सकता हूं?
- 11. मैं फॉर्म प्रोग्राम के तर्क कैसे प्राप्त कर सकता हूं?
- 12. मैं emacs 24 में जावास्क्रिप्ट-मोड परिवर्तन कैसे ठीक कर सकता हूं?
- 13. डीबगिंग करते समय मैं "इस परिवर्तनीय परिवर्तन तक कैसे चला सकता हूं"?
- 14. मैं EditText परिवर्तन कैसे प्राप्त कर सकता हूं?
- 15. मैं जावा प्रोग्राम के लिए .exe कैसे बना सकता हूं?
- 16. मैं गतिशील जावास्क्रिप्ट कैसे उत्पन्न कर सकता हूं?
- 17. मैं जावा में जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं?
- 18. मैं कॉफीस्क्रिप्ट में जावास्क्रिप्ट लाइब्रेरी कैसे आयात कर सकता हूं?
- 19. मैं प्रोग्राम की स्थिति कैसे प्राप्त कर सकता हूं?
- 20. मैं रुबी को जावास्क्रिप्ट में कैसे संकलित कर सकता हूं?
- 21. मैं एक गो प्रोग्राम कैसे संकलित कर सकता हूं?
- 22. मैं जावास्क्रिप्ट में टाइमज़ोन नाम कैसे प्राप्त कर सकता हूं?
- 23. मैं वीबीए से पायथन प्रोग्राम कैसे कॉल कर सकता हूं?
- 24. मैं जावास्क्रिप्ट के साथ इंटरऑप करने के लिए सी # कैसे प्राप्त कर सकता हूं?
- 25. मैं कोई प्रोग्राम कैसे चला सकता हूं?
- 26. मैं प्रोग्राम को प्रोग्राम रूप से कैसे स्क्रॉल कर सकता हूं?
- 27. क्या मैं स्थानीय स्टैंडअलोन जावास्क्रिप्ट प्रोग्राम बना सकता हूं?
- 28. मैं एक परिवर्तनीय ईवेंट हैंडलर को एक चर में कैसे संलग्न कर सकता हूं?
- 29. सी # में परिवर्तनीय परिवर्तनों के मूल्य के दौरान कोड कैसे निष्पादित कर सकता हूं?
- 30. मैं कैसे पता लगा सकता हूं कि subprocess.Popen प्रतीक्षा करें() stdout = PIPE अगर हमेशा के लिए इंतजार कर रहा है?
अब संपादित किया गया है, यह हर 50ms की जांच करता है और गैर-बूल के लिए काम करता है।जैसा कि मैंने ऐसा करने का त्वरित और आसान तरीका कहा है, इस लिंक का पालन करें: http://stackoverflow.com/questions/1029241/javascript-object-watch-for-all-browsers (पहले से @mplungjan द्वारा पोस्ट किया गया) और अधिक के लिए गहन समस्या-सबूत समाधान। – aularon
मुझे लगता है कि आपका मतलब था 'कुछ === something_cachedValue'। फिर यह काम करता है: http://jsfiddle.net/pEnYC/ – Skilldrick
@ स्किलड्रिक, हाँ मेरा मतलब था, मैंने इसे ठीक किया। सुधार के लिए धन्यवाद:) – aularon