فرآیندهای Asynchronous در جاوااسکریپت
مهر 11, 1399
جاوااسکریپت یک زبان برنامه نویسی Single Thread است و تنها قادر به انجام یک کار در واحد همان زمان میباشد. اما در برنامه نویسی، بخصوص هنگام کار با وب، بسیاری از کارها وجود دارند که به طور همزمان انجام نمیشوند. به عنوان مثال وقتی که یک درخواست Http را ارسال می کنیم.
چگونه میتوان با جاوااسکریپت تنها یک کار را همزمان انجام میدهد کار کنیم؟ جواب آسان است: فرآیندهای Asynchronous در جاوااسکریپت به محیط اجرای برنامه یعنی مرورگر یا Node.js سپرده میشود.
در نتیجه فقط به این محیط اجازه داده میشود تا بداند که دقیقا چه کاری باید انجام شود. به عنوان مثال کدام تابع را باید اجرا کند تا بتواند از نتیجه آن استفاده کند. برای همین، جاوااسکریپت از توابع Callback استفاده میکند.
setTimeout(msg, 5000) console.log('...') function msg() { console.log('Message') }
یکی از امکانات جاوااسکریپت برای کار با مفاهیم Asynchronous استفاده از Promise ها است.
const sendRequest = () => { fetch('https://jsonplaceholder.typicode.com/posts/1') .then((response) => { return response.json() }) .then((response) => { console.log(response) }) .catch((err) => { console.log('Error') console.log(err) }) } sendRequest()
در صورتی که برای این مثال بخواهیم از توابع Async/Await استفاده کنیم، کد ما به این صورت خواهد بود:
const sendRequest = async () => { const response = await fetch('https://jsonplaceholder.typicode.com/posts/1') const responseData = await response.json() console.log(responseData) } sendRequest()
سیر تکامل برنامهنویسی ناهمگام در جاوااسکریپت