অ্যাসিঙ্ক ফাংশনগুলি আপনাকে প্রতিশ্রুতি-ভিত্তিক কোড লিখতে দেয় যেন এটি সিঙ্ক্রোনাস।
Async ফাংশনগুলি Chrome, Edge, Firefox এবং Safari-এ ডিফল্টরূপে সক্রিয় করা হয় এবং সেগুলি বেশ স্পষ্টতই অসাধারণ। তারা আপনাকে প্রতিশ্রুতি-ভিত্তিক কোড লেখার অনুমতি দেয় যেন এটি সিঙ্ক্রোনাস, কিন্তু মূল থ্রেড ব্লক না করে। তারা আপনার অ্যাসিঙ্ক্রোনাস কোড কম "চতুর" এবং আরও পাঠযোগ্য করে তোলে।
Async ফাংশন এই মত কাজ করে:
async function myFirstAsyncFunction() {
try {
const fulfilledValue = await promise;
} catch (rejectedValue) {
// …
}
}
আপনি যদি একটি ফাংশন সংজ্ঞার আগে async কীওয়ার্ড ব্যবহার করেন, তাহলে আপনি ফাংশনের মধ্যে await ব্যবহার করতে পারেন। আপনি যখন একটি প্রতিশ্রুতির await , তখন প্রতিশ্রুতি স্থির না হওয়া পর্যন্ত ফাংশনটি একটি নন-ব্লকিং উপায়ে বিরাম দেওয়া হয়। প্রতিশ্রুতি পূরণ হলে, আপনি মূল্য ফিরে পাবেন। প্রতিশ্রুতি প্রত্যাখ্যান করলে, প্রত্যাখ্যান করা মান নিক্ষেপ করা হয়।
ব্রাউজার সমর্থন
উদাহরণ: একটি আনয়ন লগিং
বলুন আপনি একটি URL আনতে চান এবং পাঠ্য হিসাবে প্রতিক্রিয়া লগ করুন৷ প্রতিশ্রুতি ব্যবহার করে এটি কীভাবে দেখায় তা এখানে:
function logFetch(url) {
return fetch(url)
.then((response) => response.text())
.then((text) => {
console.log(text);
})
.catch((err) => {
console.error('fetch failed', err);
});
}
এবং এখানে async ফাংশন ব্যবহার করে একই জিনিস:
async function logFetch(url) {
try {
const response = await fetch(url);
console.log(await response.text());
} catch (err) {
console.log('fetch failed', err);
}
}
এটি একই সংখ্যক লাইন, কিন্তু সমস্ত কলব্যাক চলে গেছে। এটি পড়া সহজ করে তোলে, বিশেষ করে যারা প্রতিশ্রুতির সাথে কম পরিচিত তাদের জন্য।
Async রিটার্ন মান
Async ফাংশন সর্বদা একটি প্রতিশ্রুতি প্রদান করে, আপনি await ব্যবহার করুন বা না করুন। যে প্রতিশ্রুতি async ফাংশন রিটার্ন যাই হোক না কেন সঙ্গে সমাধান, বা async ফাংশন নিক্ষেপ যাই হোক না কেন সঙ্গে প্রত্যাখ্যান. তাই এর সাথে:
// wait ms milliseconds
function wait(ms) {
return new Promise((r) => setTimeout(r, ms));
}
async function hello() {
await wait(500);
return 'world';
}
… hello() কল করা একটি প্রতিশ্রুতি প্রদান করে যা "world" এর সাথে পূরণ করে ।
async function foo() {
await wait(500);
throw Error('bar39;);
}
… foo() কল করা একটি প্রতিশ্রুতি প্রদান করে যা Error('bar') দিয়ে প্রত্যাখ্যান করে ।
উদাহরণ: একটি প্রতিক্রিয়া স্ট্রিমিং
আরও জটিল উদাহরণে অ্যাসিঙ্ক ফাংশনের সুবিধা বৃদ্ধি পায়। বলুন আপনি অংশগুলি লগ আউট করার সময় একটি প্রতিক্রিয়া স্ট্রিম করতে চেয়েছিলেন এবং চূড়ান্ত আকারটি ফেরত দিতে চেয়েছিলেন।
এখানে এটি প্রতিশ্রুতি সহ:
function getResponseSize(url) {
return fetch(url).then((response) => {
const reader = response.body.getReader();
let total = 0;
return reader.read().then(function processResult(result) {
if (result.done) return total;
const value = result.value;
total += value.length;
console