javascript - atscript - स्क्रिप्टिंग भाषा




जावास्क्रिप्ट का उपयोग कर विशिष्ट देरी के बाद स्क्रिप्ट निष्पादित करें (8)

आप कोड को वादे के पीछे क्यों नहीं डाल सकते? (मेरे सिर के ऊपर से टाइप किया गया)

new Promise(function(resolve, reject) {
  setTimeout(resolve, 2000);
}).then(function() {
  console.log('do whatever you wanted to hold off on');
});

क्या jQuery delay() या wait() समान कोई जावास्क्रिप्ट विधि है delay() किसी विशिष्ट समय के लिए स्क्रिप्ट के निष्पादन में देरी करने के लिए)?


आप नियमित अंतराल पर बार-बार कुछ कोड चलाने के लिए window.setInterval() का भी उपयोग कर सकते हैं।


निम्नलिखित है:

setTimeout(function, milliseconds);

फ़ंक्शन जिसे उस समय पारित किया जा सकता है जिसके बाद फ़ंक्शन निष्पादित किया जाएगा।

देखें: विंडो setTimeout() विधि


पहले की टिप्पणियों को जोड़ने के लिए, मैं निम्नलिखित कहना चाहूंगा:

जावास्क्रिप्ट में setTimeout() फ़ंक्शन प्रति स्क्रिप्ट के निष्पादन को रोक नहीं देता है, लेकिन केवल भविष्य में कोड को निष्पादित करने के लिए संकलक को बताता है।

ऐसा कोई फ़ंक्शन नहीं है जो वास्तव में जावास्क्रिप्ट में निष्पादित निष्पादन रोक सकता है। हालांकि, आप अपना स्वयं का फ़ंक्शन लिख सकते हैं जो किसी भी समय तक बिना शर्त लूप की तरह करता है जब तक कि Date() फ़ंक्शन का उपयोग करके समय की आवश्यकता न हो और आपको आवश्यक समय अंतराल जोड़ना पड़े।


मुझे सेटटाइमआउट को कॉल करने के लिए तीन अलग-अलग तरीकों के साथ मॉरियस की व्याख्या (उच्चतम उत्थान प्रतिक्रिया) पसंद आया।

मेरे कोड में मैं AJAX सहेजने के ईवेंट को पूरा करने के बाद स्वचालित रूप से पिछले पृष्ठ पर ऑटो-नेविगेट करना चाहता हूं। सहेजने की घटना के समापन में सीएसएस में थोड़ी सी एनीमेशन है जो दर्शाता है कि बचत सफल रही थी।

मेरे कोड में मुझे पहले दो उदाहरणों के बीच एक अंतर मिला:

setTimeout(window.history.back(), 3000);

यह टाइमआउट के लिए इंतजार नहीं करता है - बैक () लगभग तुरंत कहा जाता है इससे कोई फर्क नहीं पड़ता कि देरी के लिए मैंने कितना नंबर लगाया है।

हालांकि, इसे बदलना:

setTimeout(function() {window.history.back()}, 3000);

यह वही करता है जो मैं उम्मीद कर रहा था।

यह बैक () ऑपरेशन के लिए विशिष्ट नहीं है, वही alert() साथ होता है। मूल रूप से पहले मामले में उपयोग किए गए alert() साथ, देरी का समय अनदेखा किया जाता है। जब मैं पॉपअप को खारिज करता हूं तो सीएसएस के लिए एनीमेशन जारी रहता है।

इस प्रकार, मैं दूसरी या तीसरी विधि की सिफारिश करता हूं, भले ही आप कार्यों में निर्मित और तर्कों का उपयोग न करें।


मेरे पास कुछ AJAX आदेश थे जो मैं बीच में देरी के साथ दौड़ना चाहता था। ऐसा करने का एक तरीका यहां एक सरल उदाहरण है। हालांकि मैं अपने अपरंपरागत दृष्टिकोण के लिए झुकाव के लिए तैयार होने के लिए तैयार हूं। :)

//  Show current seconds and milliseconds
//  (I know there are other ways, I was aiming for minimal code
//  and fixed width.)
function secs()
{
    var s = Date.now() + ""; s = s.substr(s.length - 5);
  return s.substr(0, 2) + "." + s.substr(2);
}

//  Log we're loading
console.log("Loading: " + secs());

//  Create a list of commands to execute
var cmds = 
[
    function() { console.log("A: " + secs()); },
    function() { console.log("B: " + secs()); },
    function() { console.log("C: " + secs()); },
    function() { console.log("D: " + secs()); },
    function() { console.log("E: " + secs()); },
  function() { console.log("done: " + secs()); }
];

//  Run each command with a second delay in between
var ms = 1000;
cmds.forEach(function(cmd, i)
{
    setTimeout(cmd, ms * i);
});

// Log we've loaded (probably logged before first command)
console.log("Loaded: " + secs());

आप कोड ब्लॉक की प्रतिलिपि बना सकते हैं और उसे कंसोल विंडो में पेस्ट कर सकते हैं और कुछ ऐसा देख सकते हैं:

Loading: 03.077
Loaded: 03.078
A: 03.079
B: 04.075
C: 05.075
D: 06.075
E: 07.076
done: 08.076

यदि आपको केवल देरी का परीक्षण करने की आवश्यकता है तो आप इसका उपयोग कर सकते हैं:

function delay(ms) {
   ms += new Date().getTime();
   while (new Date() < ms){}
}

और फिर यदि आप 2 सेकंड के लिए देरी करना चाहते हैं तो आप करते हैं:

delay(2000);

यद्यपि उत्पादन के लिए सबसे अच्छा नहीं हो सकता है। टिप्पणियों में उस पर और अधिक


सरल जवाब है:

setTimeout(
    function () {
        x = 1;
    }, 1000);

ऊपर दिया गया कार्य 1 सेकंड (1000 एमएस) के लिए इंतजार कर रहा है, फिर x को 1 सेट करता है। जाहिर है यह एक उदाहरण है; आप अज्ञात फ़ंक्शन के अंदर जो कुछ भी चाहते हैं वह कर सकते हैं।






settimeout