মূল কন্টেন্টে যান
মডিউল 7 · 1-এর পাঠ 4কোর্সে 25/32~12 min
মডিউল পাঠ (1/4)

প্রতিশ্রুতি: তারা কি

একটি প্রতিশ্রুতি এমন একটি মান যা একটি অপারেশনের ফলাফলকে প্রতিনিধিত্ব করে যা ভবিষ্যতে শেষ হবে। এটি তিনটি রাজ্যের একটিতে হতে পারে:

  • মুলতুবি — অপারেশন এখনও চলছে
  • পূর্ণ — এটি সফলভাবে শেষ হয়েছে, একটি মান আছে
  • প্রত্যাখ্যাত — এটি ব্যর্থ হয়েছে, একটি ত্রুটি আছে

একবার এটি মুলতুবি অবস্থা ছেড়ে চলে গেলে, এটি চিরতরে "নিষ্পত্তি" হয়ে যায়।

একটি সমাধান করা প্রতিশ্রুতি তৈরি করা

দুটি সবচেয়ে সাধারণ উপায় - আপনি প্রায় কখনই কনস্ট্রাক্টরের সাথে "হাতে" প্রতিশ্রুতি তৈরি করবেন না:

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

ফলাফল পড়া হচ্ছে: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

.then একটি ফাংশন গ্রহণ করে যাকে সমাধানকৃত মান দিয়ে ডাকা হয়। .catch প্রত্যাখ্যানের ক্ষেত্রে ত্রুটি সহ একটি ফাংশন গ্রহণ করে।

চেইনিং

প্রতি .then ঘুরে ফিরে একটি প্রতিশ্রুতি দেয়: আপনি রূপান্তর করতে তাদের চেইন করতে পারেন ধাপে ধাপে মান।

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

যদি .then ছুঁড়ে দেয় (বা ব্যর্থ হয় এমন একটি প্রতিশ্রুতি ফেরত দেয়), মৃত্যুদন্ড প্রথম পরবর্তী .catch এ লাফ দেয়।

কনস্ট্রাক্টর (বিরল)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

আপনি এটি শুধুমাত্র তখনই ব্যবহার করবেন যখন আপনাকে এমন কিছু "প্রতিশ্রুতি" দিতে হবে যা কলব্যাক ব্যবহার করে (যেমন পুরানো DOM API বা সেটটাইমআউট)।

চেষ্টা করে দেখুন

ব্যায়াম#js.m7.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`প্রতিশ্রুতিযুক্ত সংস্করণ(n)` সংজ্ঞায়িত করুন যে, একটি সংখ্যা দেওয়া হলে, n এর দ্বিগুণ সহ একটি প্রতিশ্রুতি সমাধান করা হয়।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

প্রমিস.রিসোলভ (n * 2) ফেরত দিন

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#js.m7.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

`ইনক্রিমেন্ট থ্রি(পি)` সংজ্ঞায়িত করুন যা একটি সংখ্যার প্রতিশ্রুতি পায় এবং সংখ্যার প্রতিশ্রুতি দেয় + 3। একটি .তারপর চেইন ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

p. তারপর(n) => n + 3)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ