جاوااسکریپت چیزی مابین این دو است. جاوااسکریپت در ذات خود زبان Synchronous است و خط به خط خوانده میشود. به عبارت دیگه جاوااسکریپت در لحظه تنها یک عملگر را اجرا می کند. ولی این اصلا چیز خوبی نیست.
فرض کنید قرار است شما به دیتابیس یک سایت موسیقی ریکوئست بزنید و 800 رکورد بخوانید. در زبان Synchronous شما باید منتظر بمانید تا ابتدا این 800 رکورد خوانده شود تا بتوانید به سراغ کدهای دیگر بروید.
خوشبختانه شما می توانید طوری کد بزنید تا جاوااسکریپت بصورت Asynchronous رفتار کند. راه هایی که پیش پای شما است به شرح زیر است:
1. callbackها
می توان گفت callbackها فانکشن هایی هستند که بعنوان آرگومان به فانکشن دیگر پاس داده می شوند. زمانی که یک فانکشن تمام شود callback اجرا می شود.
هرچند این راه حل خوبی بنظر میرسد، اما بی عیب نیست. از آنجایی که شما نمی دانید دقیقا کی فانکشن C به نتیجه می رسد، مجبور هستید تا فانکشن های وابسته را درون آن قرار بدهید. اینکار به سرعت تبدیل به جهنم callback ها خواهد شد.
2. Promise
با کمک Promise می توانید کدها را از هم جدا کنید و از جهنم callback ها آزاد شوید. Promise به شما این امکان را میدهد که تا زمان تکمیل تسک قبلی، تسک های بعدی را به تاخیر بیاندازید.
3. Async/Await
به کمک Async/Await میتوانید کدهای asynchronous را بصورت synchronous بنویسید:
ابتدا Async فانکشن promise بر می گرداند.
سپس Await منتظر promise می ماند.
مطالعه بیشتر: