جافاسكريبت - jQuery: الانتظار/التأخير لمدة ثانية واحدة دون تنفيذ الكود


لا أستطيع تشغيل طريقة .delay في jQuery:

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

أنا أستخدم حلقة while للانتظار حتى تكون قيمة متغيرة بشكل غير مسيطر عليها أكبر من أو تساوي قيمة أخرى ولا أستطيع إيجاد أي طريقة لإيقاف التنفيذ لمدة X ثوانٍ.

الإجابة رقم 1

يمكنك أيضًا تأجيل بعض العمليات بهذه الطريقة:

setTimeout(function (){
  
  // Something you want delayed.
            
}, 5000); // How long you want the delay to be, measured in milliseconds.

الإجابة رقم 2

تُستخدم الدالة .delay لتأخير الرسوم المتحركة في قائمة الانتظار، وليس لإيقاف التنفيذ.

بدلاً من استخدام حلقة while، تحتاج إلى استدعاء طريقة بشكل تكراري تقوم بالتحقق كل ثانية باستخدام setTimeout:

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

check();

الإجابة رقم 3

ES6 مؤقت التوقف

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

تعديل: 204586560000 مللي ثانية هو الوقت التقريبي بين السؤال الأصلي وهذا الجواب... بافتراض أنني حسبت بشكل صحيح.

الإجابة رقم 4

إذا كنت تستخدم ميزات ES6 وأنت في دالة غير متزامنة، يمكنك وقف تنفيذ الكود لفترة معينة باستخدام هذه الدالة:

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
}

الإجابة رقم 5

وظيفة delay في jQuery مُصممة للاستخدام مع التأثيرات وقوائم انتظار التأثيرات، انظر مستندات delay والمثال الوارد فيها:

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

إذا كنت تريد مراقبة متغير للتغيرات، يمكنك القيام بشيء مثل

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