2010-02-04 12 views
6

मैं अपने कार्यक्रम में निम्नलिखित कोड को चलाने के लिए प्रयास करते हैंखिड़कियों लिपि में काम नहीं कर रहा setTimeout (jscript)

setTimeout("alert('moo')", 1000); 

मैं निम्न त्रुटि

Error: Object expected 
Code: 800A138F 
Source: Microsoft JScript runtime error 

क्यों? क्या मैं गलत कार्य कह रहा हूं? मैं क्या करना चाहता हूं बाद के कार्य के निष्पादन में देरी हो रही है।

+0

हमें इससे अधिक कोड देखने की आवश्यकता होगी। –

उत्तर

7

ऐसा लगता है कि आप गैर-ब्राउज़र-आधारित स्क्रिप्ट (विंडोज स्क्रिप्ट होस्ट या इसी तरह) में setTimeout का उपयोग कर रहे हैं। आप ऐसा नहीं कर सकते हालांकि, आप अपनी लिपि को संक्षेप में निलंबित करने के लिए WScript.Sleep का उपयोग कर सकते हैं, जिसके साथ आप एक समान प्रभाव प्राप्त कर सकते हैं। इसके अलावा, alert डब्लूएसएच फ़ंक्शन नहीं है; आप WScript.Echo चाहते हैं। WSH reference on MSDN पर और अधिक।

+0

lol यह फिर से नहीं ;-) मैंने बस एमएसडीएन लिंक के साथ अपने उत्तर में 'स्लीप' विधि संपादित की है। –

+0

और बम ने आपका जवाब स्वीकार किया, मेरा नहीं! तंत्रिका ;-) –

+0

@ एंडी: एलओएल! लौटाने! (अब पेक्का कहाँ है?) –

6

setTimeout वेब ब्राउज़र द्वारा प्रदत्त window ऑब्जेक्ट का एक तरीका है। यह विंडोज स्क्रिप्ट होस्ट पर चल रही स्क्रिप्ट के लिए उपलब्ध नहीं है। उन स्क्रिप्ट्स में शुरू होने से निष्पादन का एक धागा होता है और इसमें कोई देरी टाइमर नहीं होता है।

यदि आप स्क्रिप्ट निष्पादन को रोकना चाहते हैं तो आप WScript ऑब्जेक्ट की Sleep विधि का उपयोग कर सकते हैं।

3

मुझे डब्लूएसएच की आवश्यकता है जो कि ब्राउज़र में समान कोड की तरह व्यवहार करे जो सेटटाइमआउट का उपयोग करता है, तो यहां मैं जो आया हूं उसके साथ।

बस अपने एकल धागे को कतार में सब कुछ निष्पादित करें। आप कतार में जोड़ना जारी रख सकते हैं। कार्यक्रम केवल तब समाप्त हो जाएगा जब कतार में कोई फ़ंक्शन नहीं छोड़ा जाता है।

यह केवल कार्यों के लिए तारों का समर्थन नहीं करता है।

function main() { 
    Test.before(); 
    _setTimeout(Test.timeout1, 1000); 
    _setTimeout(Test.timeout2, 2000); 
    _setTimeout(Test.timeout3, 500); 
    _setTimeout(Test.error, 2001); 
    Test.after(); 
} 

var Test = function() { 
    var ld = "---- "; 
    var rd = " ----"; 
    return { 
    before : function() { 
     log(ld + "Before" + rd); 
    }, 
    after : function() { 
     log(ld + "After" + rd); 
    }, 
    timeout1 : function() { 
     log(ld + "Timeout1" + rd); 
    }, 
    timeout2 : function() { 
     log(ld + "Timeout2" + rd); 
    }, 
    timeout3 : function() { 
     log(ld + "Timeout3" + rd); 
    }, 
    error : function() { 
     log(ld + "error" + rd); 
     errorFunc(); 
    } 
    }; 
}(); 

var FuncQueue = function() { 
    var funcQueue = []; 
    function FuncItem(name, func, waitTil) { 
    this.name = name; 
    this.func = func; 
    this.waitTil = waitTil; 
    } 
    return { 
    add : function(func, name, waitTil) { 
     funcQueue.push(new FuncItem(name, func, waitTil)); 
    }, 
    run : function() { 
     while (funcQueue.length > 0) { 
     var now = new Date().valueOf(); 
     for (var i = 0; i < funcQueue.length; i++) { 
      var item = funcQueue[i]; 
      if (item.waitTil > now) { 
      continue; 
      } else { 
      funcQueue.splice(i, 1); 
      } 
      log("Executing: " + item.name); 
      try { 
      item.func(); 
      } catch (e) { 
      log("Unexpected error occured"); 
      } 
      log("Completed executing: " + item.name); 
      break; 
     } 
     if (funcQueue.length > 0 && i > 0) { 
      if (typeof (WScript) != "undefined") { 
      WScript.Sleep(50); 
      } 
     } 
     } 
     log("Exhausted function queue"); 
    } 
    } 
}(); 

function _setTimeout(func, delayMs) { 
    var retval = undefined; 
    if (typeof (setTimeout) != "undefined") { 
    retval = setTimeout(func, delayMs); // use the real thing if available 
    } else { 
    FuncQueue.add(func, "setTimeout", new Date().valueOf() + delayMs); 
    } 
    return retval; 
} 

var log = function() { 
    function ms() { 
    if (!ms.start) { 
     ms.start = new Date().valueOf(); 
    } 
    return new Date().valueOf() - ms.start; // report ms since first call to function 
    } 
    function pad(s, n) { 
    s += ""; 
    var filler = "  "; 
    if (s.length < n) { 
     return filler.substr(0, n - s.length) + s; 
    } 
    return s; 
    } 
    return function(s) { 
    if (typeof (WScript) != "undefined") { 
     WScript.StdOut.WriteLine(pad(ms(), 6) + " " + s); 
    } else { 
     // find a different method 
    } 
    } 
}(); 

FuncQueue.add(main, "main"); 
FuncQueue.run(); 
0

जो चेतावनी समारोह एक स्टैंड-अलोन स्क्रिप्ट (विंडोज़ स्क्रिप्ट होस्ट वातावरण) में काम करने के लिए खोज रहा है किसी को भी के लिए, मैं jPaq's चेतावनी समारोह जो here और डाउनलोड here प्रलेखित है देखने की अनुशंसा करते। मुझे निश्चित रूप से इस नई लाइब्रेरी को मेरी स्टैंड-अलोन स्क्रिप्ट के लिए सहायक होने के लिए मिला है।

संबंधित मुद्दे