2016-12-26 5 views
8

मुझे एक ऐसा फ़ंक्शन चाहिए जो एक चर के अस्तित्व में आने तक प्रतीक्षा करता है।टाइपिंग के साथ एक चर मौजूद होने तक प्रतीक्षा एक अनंत लूप

function wait(variable, callback) { 
    if (typeof variable !== "undefined") 
     callback(); 
    else 
     setTimeout(function() { 
      wait(variable, callback); 
     }, 0) 
} 

नीचे दिए गए उदाहरण कोड के साथ इस फ़ंक्शन को कॉल करना अनंत लूप का कारण बनता है।

var a; 
wait(a, function(){console.log('success')}); 
setTimeout(function(){a=1}, 1000) 

क्यों?

+0

वैरिएबल मूल्य से पारित होते हैं, संदर्भ के अनुसार नहीं, इसलिए आप अपने 'सेटटाइमआउट' में वर्तमान, अपरिभाषित मान को पारित कर रहे हैं। – Barmar

+2

आप 'ए' के मान को पार कर रहे हैं, जो हमेशा 'अपरिभाषित' – haim770

उत्तर

13

जावास्क्रिप्ट pass by value है, इसलिए जब आप a से wait पास करते हैं, तो आप केवल undefined मान पास करते हैं।

आप के बजाय प्रतीक्षा हालत के लिए एक समारोह गुजर कोशिश कर सकते हैं:

var a; 
 
console.log('started'); 
 
wait(function(){return a}, function(){console.log('success')}); 
 
setTimeout(function(){a=1}, 1000) 
 

 
function wait(condition, callback) { 
 
    if (typeof condition() !== "undefined") { 
 
     callback(); 
 
    } else { 
 
     setTimeout(function() { 
 
      wait(condition, callback); 
 
     }, 0) 
 
    } 
 
}

आप, साथ ही चर मौजूदा की तुलना में अधिक के लिए प्रतीक्षा करने के लिए इस विधि का विस्तार कर सकता है, लेकिन जब यह है के लिए एक निश्चित मूल्य या कुछ।

यदि आप एनपीएम और वादे का उपयोग करते हैं, तो एक पुस्तकालय है जो पहले से ही यह करता है: wait-until-promise। ऐसे कुछ भी हो सकते हैं जो शास्त्रीय कॉलबैक का भी उपयोग करते हैं।

+0

होगा, मैं सुझाव देता हूं कि पूरे 'टाइपोफ' चेक को स्थिति – Bergi

+1

के अंदर डालने का सुझाव दें, मैं सुझाव देता हूं कि स्निपेट के बाद वाक्य में। – Scimonster

0
var a ; 
function wait(callback) { 
if (typeof a !== "undefined") callback(); 
else setTimeout(function() { 
     wait(callback); 
    }, 0) 
} 
wait(function(){console.log('success')}); 
setTimeout(function(){a=1},1000) 
संबंधित मुद्दे