আজ বেশিরভাগ বাস্তব Node.js কোড async/await সিনট্যাক্স দিয়ে লেখা হয়। এটি promise প্রতিস্থাপন করে না — প্রতিটি async ফাংশন এখনো একটি ফেরত দেয় — এটি শুধু আপনাকে promise-ভিত্তিক কোড লেখার একটি উপায় দেয় যা সাধারণ synchronous কোডের মতো উপর থেকে নিচে পড়া যায়।
আগের দুই পাঠের একই তিন-ফাইল read, এবার async/await দিয়ে:
const fs = require('fs/promises')
async function loadAllData() {
const userData = await fs.readFile('user.json', 'utf8')
const settingsData = await fs.readFile('settings.json', 'utf8')
const prefData = await fs.readFile('preferences.json', 'utf8')
console.log('All data loaded')
}
loadAllData()দুই পাঠ আগের nested ভার্সনের সাথে এটি তুলনা করুন — একই তিনটি অপারেশন, এখন একটি পিরামিডের বদলে সাধারণ স্টেটমেন্টের ক্রম হিসেবে পড়া যাচ্ছে।
.catch()-এর বদলে await কলগুলোর চারপাশে একটি সাধারণ try/catch ব্লক থাকে:
async function loadAllData() {
try {
const userData = await fs.readFile('user.json', 'utf8')
const settingsData = await fs.readFile('settings.json', 'utf8')
console.log('All data loaded')
} catch (err) {
console.error('Something failed:', err)
}
}একের পর এক তিনটি কল await করলেও সেগুলো এখনো ধারাবাহিকভাবে চলে — async/await শুধু promise-এর উপর সিনট্যাক্স, এটি জিনিসগুলো আসলে কখন চলে তা বদলায় না। আগের পাঠের সমান্তরাল আচরণ পেতে, একটি একক Promise.all() await করুন:
async function loadAllData() {
const [userData, settingsData, prefData] = await Promise.all([
fs.readFile('user.json', 'utf8'),
fs.readFile('settings.json', 'utf8'),
fs.readFile('preferences.json', 'utf8'),
])
console.log('All data loaded')
}await একটি ফাংশনকে বিরতি দেয়, পুরো প্রোগ্রামকে নয়
একটি await শুধু যে ফাংশনের ভেতরে এটি লেখা তাকে বিরতি দেয় — এটি কখনো একটি Sync মেথডের মতো বাকি প্রোগ্রামকে ব্লক করে না। একটি ফাংশন একটি await-এ বিরতিতে থাকা অবস্থায় ইভেন্ট লুপ অন্য রিকোয়েস্ট সামলাতে থাকে।
আধুনিক Node একটি ফাইলের টপ-লেভেল কোডে সরাসরি await-ও অনুমতি দেয় — কোনো wrapping async ফাংশনের প্রয়োজন নেই — কিন্তু শুধু ES Modules-এ (import/export নিয়ে আগের পাঠ)। দ্রুত স্ক্রিপ্টের জন্য এটি সুবিধাজনক; বাস্তব অ্যাপ্লিকেশন কোডের ভেতরে, উপরের মতো লজিককে নামযুক্ত async ফাংশনে মোড়ানো বেশি পরিষ্কার থাকে।