توابعي كه بصورت موازي با سايرتوابع اجرا ميشوند، ناهمزمان(asynchronouse) ناميده ميشوند .بهترين نمونه آن تابعsetTimeout() ميباشد .
مثالهاي استفاده شده در فصل قبلي بسيار ساده بودند .هدف از ارائه آنها توضيح در مورد فرمت كلي توابع كال بكي مي باشند.
مثال ـ نمونه تابع كال بكي
function myDisplayer(something) { document.getElementById("demo").innerHTML = something; } function myCalculator(num1, num2, myCallback) { let sum = num1 + num2; myCallback(sum); } myCalculator(5, 5, myDisplayer);
در مثال بالاmyDisplay نام يك تابع است . آن به تابع myCalculator()بعنوان آرگومان ارسال ميشود .
در دنياي واقعي ، فراخواني اغلب با توابع ناهمزمان استفاده ميشود .مثا ل معمولي آن تابع setTimeout( ) است .
هنگام استفاده ازتابع جاوااسكريپتsetTimeout( ) ميتوان يك تابع كال بك را مشخص كرد، تا در زمان وقفه اجراشود.
مثال ـ دراين مثال تابعmyFunction تابع كال بك است كه در فاصله سه ثانيه اجرا ميشود .
setTimeout(myFunction, 3000);
function myFunction() {
document.getElementById("demo").innerHTML = "I love You !!";
}
در مثال بالا تابعmyFunction() تابع كال بك است وبعنوان يك آرگومان به تابعsetTimeout() ارسال ميشود .وبعداز سه ثانيه فراخوان ميشود.
توجه ـ هنگاميكه تابعي را بعنوان آرگومان ارسال ميكند، بخاطر داشته باشيد بدون پرانتز باز وبسته باشد.
بجاي ارسل نام تابع بعنوان آرگومان تابع ديگر ، ميتوان هميشه تابع كاملتر را ارسال نمود.
مثال ـ ارسال تابع كاملتر بعنوان آرگومان
setTimeout(function() { myFunction("I love You !!!"); }, 3000); function myFunction(value) { document.getElementById("demo").innerHTML = value; }
در مثال بالاfunction() { myFunction("I Love You !!!"); } بعنوان كال بك استفاده شده است .اين تابع كامل است كه به عنوان آرگومان بهsetTimeout( ) ارسال شده است.
300ميلي ثانيه قبل از تايم اوت است، بنابراين تابعmyFunction بعداز 3 ثانيه فراحوان ميشود.
هنگاميكه تابعsetInterval( ) ،جاوااسكريپت استفاده ميشود ميتوانيد تابع كالبكي را درفاصله زماني مشخص شده باجرا در آوريد.
مثال ـ اجراي تابع كال بك در فواصله زماني مشخص
setInterval(myFunction, 1000); function myFunction() { let d = new Date(); document.getElementById("demo").innerHTML= d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); }
در مثال بالاmyFunction بعنوان تابع كال بك است . اين تابع به عنوان آرگومان به تابعsetInterval( ) ارسال شده است .
1000ميلي ثانيه فاصله اجراي تابع كال بك است، يعني تابعmyFunction( ) هر تانيه فراخوان ميشود، وساعت را نمايش ميدهد.
در برنامه نويسي ناهمزمان، برنامه هاي جاوااسكريپت ميتوانند اجراي طولاني داشته و ديگر برنامه ها بصورت موازي اجرا شوند .اما برنامهاي ناهمزمان در نوشتن و خطايابي مشكل هستند.
بهمين دليل ، اكثر روشهاي جاوااسكريپت ناهمزمان مدرن ازكال بك ها استفاده نمي كنند .در عوض در جاوااسكريپت، برنامه نويسي ناهمزمان با استفاده ازpromises حل ميشود . در مورد اين مطالب در فصل بعدي بحث ميشود.