মডিউল পাঠ (1/4)
প্রতিশ্রুতি: তারা কি
একটি প্রতিশ্রুতি এমন একটি মান যা একটি অপারেশনের ফলাফলকে প্রতিনিধিত্ব করে যা ভবিষ্যতে শেষ হবে। এটি তিনটি রাজ্যের একটিতে হতে পারে:
- মুলতুবি — অপারেশন এখনও চলছে
- পূর্ণ — এটি সফলভাবে শেষ হয়েছে, একটি মান আছে
- প্রত্যাখ্যাত — এটি ব্যর্থ হয়েছে, একটি ত্রুটি আছে
একবার এটি মুলতুবি অবস্থা ছেড়ে চলে গেলে, এটি চিরতরে "নিষ্পত্তি" হয়ে যায়।
একটি সমাধান করা প্রতিশ্রুতি তৈরি করা
দুটি সবচেয়ে সাধারণ উপায় - আপনি প্রায় কখনই কনস্ট্রাক্টরের সাথে "হাতে" প্রতিশ্রুতি তৈরি করবেন না:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));ফলাফল পড়া হচ্ছে: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});.then একটি ফাংশন গ্রহণ করে যাকে সমাধানকৃত মান দিয়ে ডাকা হয়।
.catch প্রত্যাখ্যানের ক্ষেত্রে ত্রুটি সহ একটি ফাংশন গ্রহণ করে।
চেইনিং
প্রতি .then ঘুরে ফিরে একটি প্রতিশ্রুতি দেয়: আপনি রূপান্তর করতে তাদের চেইন করতে পারেন
ধাপে ধাপে মান।
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11যদি .then ছুঁড়ে দেয় (বা ব্যর্থ হয় এমন একটি প্রতিশ্রুতি ফেরত দেয়), মৃত্যুদন্ড
প্রথম পরবর্তী .catch এ লাফ দেয়।
কনস্ট্রাক্টর (বিরল)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});আপনি এটি শুধুমাত্র তখনই ব্যবহার করবেন যখন আপনাকে এমন কিছু "প্রতিশ্রুতি" দিতে হবে যা কলব্যাক ব্যবহার করে (যেমন পুরানো DOM API বা সেটটাইমআউট)।
চেষ্টা করে দেখুন
`প্রতিশ্রুতিযুক্ত সংস্করণ(n)` সংজ্ঞায়িত করুন যে, একটি সংখ্যা দেওয়া হলে, n এর দ্বিগুণ সহ একটি প্রতিশ্রুতি সমাধান করা হয়।
ইঙ্গিত দেখান
প্রমিস.রিসোলভ (n * 2) ফেরত দিন
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
`ইনক্রিমেন্ট থ্রি(পি)` সংজ্ঞায়িত করুন যা একটি সংখ্যার প্রতিশ্রুতি পায় এবং সংখ্যার প্রতিশ্রুতি দেয় + 3। একটি .তারপর চেইন ব্যবহার করুন।
ইঙ্গিত দেখান
p. তারপর(n) => n + 3)
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ