‎‎ناهمزماني جاوااسكريپتAsynchronous JavaScript -‎

Previous >    <Next  

‎توابعي كه بصورت موازي با سايرتوابع اجرا ميشوند، ناهمزمان‎(asynchronouse)‎ ‎ناميده ميشوند .بهترين نمونه آن تابع‎setTimeout()‎‎ ميباشد .

‎‎ناهمزماني جاوااسكريپتAsynchronous JavaScript -‎

‎مثالهاي استفاده شده در فصل قبلي بسيار ساده بودند .هدف از ارائه آنها توضيح در مورد فرمت كلي ‎توابع كال بكي مي باشند.

‎‎مثال ـ نمونه تابع كال بكي

function myDisplayer(something) {
  document.getElementById("demo").innerHTML = something;
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myDisplayer);

--(go to editor for change code and run)

‎در مثال بالا‎myDisplay‎ نام يك تابع است . آن به تابع ‎myCalculator()‎‎‎بعنوان آرگومان ارسال ميشود .

‎در دنياي واقعي ، فراخواني اغلب با توابع ناهمزمان استفاده ميشود .مثا ل معمولي آن تابع ‎setTimeout( ) ‎‎است .

‎‎در انتظار مهلت زمانيWaiting for a Timeout -‎

‎هنگام استفاده ازتابع جاوااسكريپت‎setTimeout( )‎ ميتوان يك تابع ‎كال بك را مشخص كرد، تا در زمان وقفه اجراشود.

‎‎مثال ـ دراين مثال تابعmyFunction تابع كال بك است كه در فاصله سه ثانيه اجرا ميشود .

setTimeout(myFunction, 3000);

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

--(go to editor for change code and run)

‎در مثال بالا تابع‎‎myFunction()‎‎‎ تابع كال بك است وبعنوان يك ‎آرگومان به تابع‎setTimeout()‎‎‎ ارسال ميشود .وبعداز سه ثانيه ‎فراخوان ميشود.

‎توجه ـ هنگاميكه تابعي را بعنوان آرگومان ارسال ميكند، بخاطر داشته باشيد بدون پرانتز باز ‎وبسته باشد.

Right: setTimeout(myFunction,3000)
Wrong:setTimeout(myFunction(),3000)

‎‎بجاي ارسل نام تابع بعنوان آرگومان تابع ديگر ، ميتوان هميشه تابع كاملتر را ارسال نمود.

‎‎مثال ـ ارسال تابع كاملتر بعنوان آرگومان

setTimeout(function() { myFunction("I love You !!!"); }, 3000);

function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}

--(go to editor for change code and run)

‎در مثال بالا‎function()‎ { myFunction(‎"I Love You !!!‎"); }‎ بعنوان ‎كال بك استفاده شده است .اين تابع كامل است كه به عنوان آرگومان به‎setTimeout( )‎ ‎ارسال شده است.

‎300‎ميلي ثانيه قبل از تايم اوت است، بنابراين تابع‎myFunction‎ بعداز ‎3‎ ‎ثانيه فراحوان ميشود.

‎‎انتظار براي فواصلWaiting for Intervals -‎

‎هنگاميكه تابع‎setInterval( )‎ ،جاوااسكريپت استفاده ميشود ‎ميتوانيد تابع كالبكي را درفاصله زماني مشخص شده باجرا در آوريد.

‎‎مثال ـ اجراي تابع كال بك در فواصله زماني مشخص

setInterval(myFunction, 1000);

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

--(go to editor for change code and run)

‎در مثال بالا‎myFunction‎ بعنوان تابع كال بك است . اين تابع به عنوان آرگومان ‎به تابع‎setInterval( )‎ ارسال شده است .

‎ 1000‎ميلي ثانيه فاصله اجراي تابع كال بك است، يعني تابع‎myFunction( )‎ هر تانيه ‎فراخوان ميشود، وساعت را نمايش ميدهد.

‎‎جايگزين هاي كال بكCallback Alternatives -‎

‎در برنامه نويسي ناهمزمان، برنامه هاي جاوااسكريپت ميتوانند اجراي طولاني داشته و ديگر ‎برنامه ها بصورت موازي اجرا شوند .اما برنامهاي ناهمزمان در نوشتن و خطايابي مشكل هستند.

‎بهمين دليل ، اكثر روشهاي جاوااسكريپت ناهمزمان مدرن ازكال بك ها استفاده نمي كنند .در عوض ‎در جاوااسكريپت، برنامه نويسي ناهمزمان با استفاده ازpromises حل ميشود . در مورد اين مطالب ‎در فصل بعدي بحث ميشود.


Previous >    <Next