آسنک 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().</p>

在现实世界中,回调最常与异步函数一起使用。

ਜਿਸ ਵਿੱਚ ਕਾਲਬੈਕ ਫੰਕਸ਼ਨ ਅਸਾਨੀ ਨਾਲ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ。 setTimeout();.</p>

ਕਾਲਬੈਕ ਰਾਹੀਂ ਇੱਕ ਮਿਸਾਲ ਹੈ

ਜਿਵੇਂ ਕਿ JavaScript ਫੰਕਸ਼ਨ setTimeout(); ਜਦੋਂ ਕਿਸੇ ਕਾਲਬੈਕ ਫੰਕਸ਼ਨ ਨੂੰ ਸਪੱਸ਼ਟ ਕਰਨਾ ਹੈ, ਤਾਂ:

ਇੱਕ ਉਦਾਹਰਣ

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

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

در مثال بالا،myFunction ਇਹ ਕਿਵੇਂ ਕਾਲਬੈਕ ਵਜੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ。

وظیفه (نام وظیفه) به عنوان پارامتر به setTimeout();.</p>

3000 ਮਿਲੀਸਕੰਡ ਹੈ ਇਸ ਲਈ 3 ਸਕਿੰਡ ਬਾਅਦ ਚਲਾਉਣਗੇ myFunction().</p>

ਜਦੋਂ ਤੁਸੀਂ ਫੰਕਸ਼ਨ ਨੂੰ ਪਾਰਾਮੀਟਰ ਵਜੋਂ ਪਾਸ ਕਰਦੇ ਹੋ, ਤਾਂ ਮਜ਼ਬੂਰ ਨਾ ਹੋਕੇ ਬਰਕਟਸ ਵਰਤੋਂ ਕਰੋ।

ਸਹੀ: setTimeout(myFunction, 3000);

ਖ਼ਾਲੀ: setTimeout(myFunction(), 3000);

ਜੇਕਰ ਤੁਸੀਂ ਫੰਕਸ਼ਨ ਦਾ ਨਾਮ ਪਾਰਾਮੀਟਰ ਵਜੋਂ ਦੂਜੇ ਫੰਕਸ਼ਨ ਨੂੰ ਪਾਸ ਨਹੀਂ ਕਰਦੇ, ਤਾਂ ਤੁਸੀਂ ਸਦਾ ਪੂਰੀ ਫੰਕਸ਼ਨ ਪਾਸ ਕਰ ਸਕਦੇ ਹੋ:

ਇੱਕ ਉਦਾਹਰਣ

setTimeout(function() { myFunction(ਮੈਂ ਤੁਹਾਡੇ ਨੂੰ ਪਿਆਰ ਕਰਦਾ ਹਾਂ ਹੈ!!!); }, 3000);
function myFunction(value) {}}
  document.getElementById("demo").innerHTML = value;
}

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

ਉੱਤਰਲੇ ਉਦਾਹਰਣ ਵਿੱਚfunction(){ myFunction("I love You !!!"); } ਕੰਬੈਕ ਫੰਕਸ਼ਨ ਵਜੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਇੱਕ ਸਮੁੱਚੀ ਫੰਕਸ਼ਨ ਹੈ। ਸਮੁੱਚੀ ਫੰਕਸ਼ਨ setTimeout() ਨੂੰ ਪਾਰਾਮੀਟਰ ਵਜੋਂ ਪਾਸ ਕੀਤੀ ਜਾਂਦੀ ਹੈ。

3000 ਮਿਲੀਸਕੰਡ ਹੈ ਇਸ ਲਈ 3 ਸਕਿੰਡ ਬਾਅਦ ਚਲਾਉਣਗੇ myFunction().</p>

ਉਡਾਣ ਦਾ ਸਮਾਂ:

ਜਿਵੇਂ ਕਿ JavaScript ਫੰਕਸ਼ਨ setInterval() ਹਰ ਅੰਤਰ ਵਿੱਚ ਚਲਾਉਣ ਵਾਲੀ ਕੰਬੈਕ ਫੰਕਸ਼ਨ ਨੂੰ ਸਪੱਸ਼ਟ ਕਰ ਸਕਦੇ ਹੋ

ਇੱਕ ਉਦਾਹਰਣ

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

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

ਉੱਤਰਲੇ ਉਦਾਹਰਣ ਵਿੱਚmyFunction به عنوان کالبدشکن استفاده می‌شود.

وظیفه (نام وظیفه) به عنوان پارامتر به setInterval().</p>

1000 ਹਰ ਅੰਤਰ ਦੇ ਮਿਲੀਸਕੰਡ ਵਿੱਚ ਹੈ ਇਸ ਲਈ myFunction() ਹਰ ਸੈਕੰਡ ਵਿੱਚ ਇੱਕ ਵਾਰ ਕਾਲਬੈਕ ਚੁੱਕੇ ਜਾਣਗੇ。

ਫਾਇਲ ਲੈਣ ਦੀ ਉਡਾਣ:

ਤੁਸੀਂ ਬਾਹਰੀ ਸੰਸਾਧਨ (ਜਿਵੇਂ ਕਿ ਸਕ੍ਰਿਪਟ ਜਾਂ ਫਾਇਲ) ਲੋਡ ਕਰਨ ਵਾਲੀ ਫੰਕਸ਼ਨ ਬਣਾਓ ਤਾਂ ਤੁਸੀਂ ਇਨ੍ਹਾਂ ਸਮੱਗਰੀ ਨੂੰ ਸਮੁੱਚੇ ਤੌਰ 'ਤੇ ਲੋਡ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕਰ ਸਕਦੇ。

ਇਹ ਕੰਬੈਕ ਉਪਚਾਰ ਦਾ ਸਰਬਸ਼੍ਰੇਸ਼ ਸਮਾਂ ਹੈ。

ਇਸ ਉਦਾਹਰਣ ਵਿੱਚ ਇੱਕ ਹੈਲਥ ਫਾਇਲ ਲੋਡ ਕੀਤਾ ਗਿਆ ਹੈ (mycar.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);
    }
      myCallback("Error: " + req.status);
    }
  }
  req.send();
}
getFile(myDisplayer);

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

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

وظیفه (نام وظیفه) به عنوان پارامتر به getFile().</p>

در زیر mycar.html کپی:

mycar.html

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