JavaScript همزمان

"I will finish later!"

توابعی که به طور موازی با دیگر توابع اجرا می‌شوند، به عنوان غیر سریال (asynchronous) شناخته می‌شوند

یک مثال خوب JavaScript setTimeout() است

JavaScript غیر سریال

مثال‌هایی که در فصل قبلی استفاده شده‌اند به طور قابل توجهی ساده شده‌اند.

هدف آن نمایش نحوه استفاده از بازگشت به کار است:

مثال

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}
function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}
myCalculator(5, 5, myDisplayer);

به طور مستقیم امتحان کنید

در مثال بالا،myDisplayer نام تابع است.

به عنوان پارامتر به myCalculator();

در دنیای واقعی، بازگشت به کار معمولاً با توابع غیر سریالی استفاده می‌شود.

یک مثال رایج JavaScript است setTimeout();

در انتظار تاخیر

در استفاده از توابع JavaScript، setTimeout(); در اینجا می‌توانید تابع بازگشت به کار را مشخص کنید که پس از اتمام تاخیر اجرا خواهد شد:

مثال

setTimeout(myFunction, 3000);
function myFunction() {
  document.getElementById("demo").innerHTML = "I love You !!";
}

به طور مستقیم امتحان کنید

در مثال بالا،myFunction به عنوان بازگشت به کار استفاده می‌شود.

توابع (نام توابع) به عنوان پارامتر به setTimeout();

3000 زمان بین توقف و فراخوانی است، بنابراین بعد از 3 ثانیه فراخوانی خواهد شد myFunction()

وقتی که تابع را به عنوان پارامتر انتقال می‌دهید، به یاد داشته باشید که از قفلی استفاده نکنید.

درست: setTimeout(myFunction, 3000);

اشتباه: setTimeout(myFunction(), 3000);

اگر نام تابع را به عنوان پارامتر به یک تابع دیگر منتقل نکنید، همیشه می‌توانید کل تابع را انتقال دهید:

مثال

setTimeout(function() { myFunction("I love You !!!"); }, 3000);
function myFunction(value) {}}
  document.getElementById("demo").innerHTML = value;
}

به طور مستقیم امتحان کنید

در مثال بالا،function(){ myFunction("I love You !!!"); } به عنوان کاربردهای بازگشتی استفاده می‌شود. این یک تابع کامل است. یک تابع کامل به عنوان پارامتر به setTimeout() ارسال می‌شود.

3000 زمان بین توقف و فراخوانی است، بنابراین بعد از 3 ثانیه فراخوانی خواهد شد myFunction()

طول زمان انتظار:

در استفاده از توابع JavaScript، setInterval() وقتی زمان مشخصی بین هر بار فراخوانی وجود دارد، می‌توان تابع بازگشتی برای هر بار فراخوانی مشخص کرد:

مثال

setInterval(myFunction, 1000);
function myFunction() {
  let d = new Date();
  document.getElementById("demo").innerHTML=
  d.getHours() + ":" +
  d.getMinutes() + ":" +
  d.getSeconds();
}

به طور مستقیم امتحان کنید

در مثال بالا،myFunction به عنوان فراخوانی استفاده می‌شوند.

توابع (نام توابع) به عنوان پارامتر به setInterval()

1000 زمان بین تکرارها به میلی‌ثانیه است، بنابراین myFunction() یک بار در هر ثانیه فراخوانی شود.

در انتظار فایل

اگر شما تابعی برای بارگذاری منابع خارجی (مانند اسکریپت‌ها یا فایل‌ها) ایجاد کنید، نمی‌توانید از این منابع قبل از بارگذاری کامل استفاده کنید.

بهترین زمان برای استفاده از کاربردهای بازگشتی است.

این مثال یک فایل HTML را بارگذاری می‌کند (mycar.html)، و در صورت بارگذاری کامل فایل HTML در صفحه وب نمایش داده شود:

در انتظار فایل:

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}
function getFile(myCallback) {
  let req = new XMLHttpRequest();
  req.open('GET', "mycar.html");
  req.onload = function() {
    if (req.status == 200) {
      myCallback(this.responseText);
    } else {
      myCallback("خطا: " + req.status);
    }
  }
  req.send();
}
getFile(myDisplayer);

به طور مستقیم امتحان کنید

در مثال بالا،myDisplayer به عنوان فراخوانی استفاده می‌شوند.

توابع (نام توابع) به عنوان پارامتر به getFile()

در زیر است: mycar.html کپی‌برداری از:

mycar.html

<img src="img_car.jpg" alt="خودرو زیبا" style="width:100%">
<p>خودرو وسیله نقلیه موتوری چرخ‌دار خودکار است که برای حمل و نقل استفاده می‌شود.</p>
<p>بیشتر تعریف‌ها از این اصطلاح مشخص می‌کنند که خودروها برای حرکت اصلی بر روی جاده‌ها طراحی شده‌اند، دارای صندلی برای یک تا هشت نفر هستند و معمولاً چهار چرخ دارند.</p>
<p>(Wikipedia)</p>