jQuery: कोड निष्पादित किए बिना 1 सेकंड प्रतीक्षा करें / विलंब करें


129

मुझे .delayjQuery में काम करने की विधि नहीं मिल सकती है :

$.delay(3000); // not working
$(queue).delay(3000); // not working

मैं प्रतीक्षा करने के लिए थोड़ी देर का उपयोग कर रहा हूं जब तक कि एक अनियंत्रित बदलते मूल्य दूसरे से अधिक या उसके बराबर नहीं हो और मैं एक्स सेकंड के लिए निष्पादन को हल करने का कोई तरीका नहीं खोज सकता।


कॉलबैक में
सेटटाइमआउट

आप किस संस्करण का उपयोग कर रहे हैं?
L7ColWinters

1
देरी फ़ंक्शन के लिए डिज़ाइन किया गया है कि नहीं है, यह कतारबद्ध jquery घटनाओं (जैसे फीका ()। देरी) () शो ()) के बीच उपयोग के लिए डिज़ाइन किया गया है। आपको setTimeOut फ़ंक्शन की आवश्यकता है।
जोजा

@ जोया: आप मुख्य बिंदु पर सही हैं, हालांकि शो का कोई तर्क रूप (और छिपाना) प्रभाव कतार का उपयोग नहीं करता है।
जे टोमेन

3
कृपया, यह बताएं कि आप देरी से क्या हासिल करना चाहते हैं। सभी जावास्क्रिप्ट एक एकल थ्रेड पर निष्पादित होते हैं, और इसे एक्स सेकंड के लिए फ्रीज करने से उपयोगकर्ता के प्रतिकूल अनुभव हो सकता है।
बजे दिमित्री शुक्रोपत्स्की

जवाबों:


176

$ .delay का उपयोग कतारों में एनिमेशन में देरी करने के लिए किया जाता है, न कि ठहराव के निष्पादन के लिए।

थोड़ी देर के लूप का उपयोग करने के बजाय, आपको एक ऐसी विधि को पुन: कॉल करने की आवश्यकता है जो हर सेकंड का उपयोग करके चेक करता है setTimeout:

var check = function(){
    if(condition){
        // run when condition is met
    }
    else {
        setTimeout(check, 1000); // check again in a second
    }
}

check();

1
मुझे लगता है, सेटटाइमआउट पर्याप्त है।
जीमुरात

3
आपका बम भाई, यह वही है जो मुझे अपना कोड ठीक करने के लिए चाहिए था।
jemiloii

@ जयमूरत और भविष्य में कोई और: सेटटाइमआउट निष्पादन के प्रवाह को नहीं तोड़ता है। Niessner के महान कोड ने इस असत्य परिस्थितियों को प्राप्त कर लिया!
गबर

यदि आपको निष्पादन के प्रवाह को तोड़ने की आवश्यकता नहीं है, तो आप बस उपयोग कर सकते हैं setTimeout()
जोशुआ पिन्टर

मुझे हमेशा "चेक एक फंक्शन नहीं है" मिलता है, मेरे चेक फंक्शन के दो पैरामीटर हैं
ब्लैक

211

आप इस तरह से कुछ ऑपरेशन में देरी कर सकते हैं:

setTimeout(function (){

  // Something you want delayed.

}, 5000); // How long do you want the delay to be (in milliseconds)? 

7
बस एक FYI करें, यह निष्पादन के प्रवाह को नहीं तोड़ता है, इसलिए यदि आपको कुछ सेकंड के लिए "सब कुछ बंद करने" की आवश्यकता है, तो आपको कुछ चीज़ों की आवश्यकता होने वाली है जैसे कि Niessner ने पोस्ट किया है।
जोशुआ पिन्टर

हां ... इसके फंक्शन में कॉलबैक होता है और ब्लॉक नहीं होता है। उत्तर के लिए धन्यवाद, इसने मेरा मुद्दा ठीक कर दिया।
बर्टस क्रूगर

यदि आवृत्ति बेहद कम है और हम इस फ़ंक्शन को हमेशा के लिए चलने की उम्मीद करते हैं, तो क्या यह अंततः स्टैक को उड़ा देगा?
सुसाइड बनी

16

ES6 सेटटाइमआउट

setTimeout(() => {
  console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);

संपादित करें: 204586560000 एमएस मूल प्रश्न और इस उत्तर के बीच अनुमानित समय है ... यह मानते हुए कि मैंने सही गणना की है।


2
इस प्रश्न के मूल प्रश्न से अनुमानित समय का उपयोग करके वास्तव में अच्छा है
फजीबियर

9

jQuery के delayफ़ंक्शन का उपयोग प्रभाव और प्रभाव कतारों के साथ किया जाना है, delayडॉक्स और उसमें उदाहरण देखें :

$('#foo').slideUp(300).delay(800).fadeIn(400);

यदि आप परिवर्तनों के लिए एक चर का निरीक्षण करना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं

(function() {
    var observerInterval = setInterval(function() {
        if (/* check for changes here */) {
           clearInterval(observerInterval);
           // do something here
        }
    }, 1000);
})();

setInterval का दूसरा अनिवार्य पैरामीटर है, मिलीसेकंड में समय;)
sara_thepot

1
धन्यवाद @ sara.potyscki, फिक्स्ड
जूलियन डी।

@JulianD। इस सुझाव के लिए धन्यवाद। मैं एक समाधान के लिए गुगली करते हुए इस सवाल पर उतरा। यह वही है जो मुझे अपने प्रोजेक्ट के लिए चाहिए था।
चेरिल वेलेज़

8

जावास्क्रिप्ट setTimeoutएक बहुत अच्छा समाधान है:

function funcx()
   {
   // your code here
   // break out here if needed
   setTimeout(funcx, 3000);
   }

funcx();

delayJQuery में समारोह ज्यादातर एक jQuery एनीमेशन कतार में एनिमेशन में देरी के लिए प्रयोग किया जाता है।


5

delay()कोड के प्रवाह को रोक नहीं तो इसे फिर से चलाएँ। जावास्क्रिप्ट में ऐसा करने का कोई व्यावहारिक तरीका नहीं है। सब कुछ कार्यों के साथ किया जाना चाहिए जो कॉलबैक लेते हैं जैसे कि setTimeoutदूसरों ने उल्लेख किया है।

JQuery का उद्देश्य delay()निष्पादन से पहले एक एनीमेशन कतार प्रतीक्षा करना है। तो उदाहरण के लिए $(element).delay(3000).fadeIn(250);3 सेकंड के बाद तत्व फीका कर देगा।


5

केवल जावास्क्रिप्ट यह jQuery के बिना काम करेगा

<!DOCTYPE html>
<html>
    <head>
        <script>
            function sleep(miliseconds) {
                var currentTime = new Date().getTime();
                while (currentTime + miliseconds >= new Date().getTime()) {
                }
            }

            function hello() {
                sleep(5000);
                alert('Hello');
            }
            function hi() {
                sleep(10000);
                alert('Hi');
            }
        </script>
    </head>
    <body>
        <a href="#" onclick="hello();">Say me hello after 5 seconds </a>
        <br>
        <a href="#" onclick="hi();">Say me hi after 10 seconds </a>


    </body>
</html>

1
जावास्क्रिप्ट में प्रतीक्षा करने के लिए लूपिंग एक बुरा विचार है! लूप के चलने पर सभी जावास्क्रिप्ट कार्यक्षमता बंद हो जाएगी । इससे अप्रत्याशित दुष्प्रभाव होंगे। सेट-टाइमआउट () जैसे गैर-अवरुद्ध कार्यों का उपयोग करना बेहतर है।
केविन जी।

4

जावास्क्रिप्ट एक अतुल्यकालिक प्रोग्रामिंग भाषा है, इसलिए आप समय के लिए निष्पादन को रोक नहीं सकते हैं; एकमात्र तरीका जिसे आप [छद्म] रोक सकते हैं एक निष्पादन सेटटाइमआउट () का उपयोग कर रहा है जो एक देरी नहीं है, लेकिन "विलंबित फ़ंक्शन कॉलबैक" है।


2

यदि आप ES6 सुविधाओं का उपयोग कर रहे हैं और आप एक async फ़ंक्शन में हैं, तो आप इस फ़ंक्शन के साथ एक निश्चित समय के लिए कोड निष्पादन को प्रभावी ढंग से रोक सकते हैं:

const delay = millis => new Promise((resolve, reject) => {
  setTimeout(_ => resolve(), millis)
});

आप इसका उपयोग कैसे करते हैं:

await delay(5000);

यह मिलीसेकंड की अनुरोधित राशि के लिए स्टाल करेगा, लेकिन केवल तब जब आप एक एसिंक्स फ़ंक्शन में हों । नीचे उदाहरण:

const myFunction = async function() {
  // first code block ...

  await delay(5000);

  // some more code, executed 5 seconds after the first code block finishes
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.