ماڈیول اسباق (1/4)
وعدے: وہ کیا ہیں۔
A وعدہ ایک ایسی قدر ہے جو کسی آپریشن کے نتیجے کی نمائندگی کرتی ہے جو **مستقبل میں ختم ہو جائے گی۔ یہ تین ریاستوں میں سے ایک میں ہو سکتا ہے:
- زیر التواء — آپریشن ابھی بھی جاری ہے۔
- مکمل — یہ کامیابی سے ختم ہوا، ایک قدر ہے۔
- مسترد کر دیا گیا — یہ ناکام ہو گیا، ایک خرابی ہے۔
ایک بار جب یہ زیر التواء حالت سے نکل جاتا ہے، تو یہ ہمیشہ کے لیے "حاصل" ہو جاتا ہے۔
ایک حل شدہ وعدہ بنانا
دو سب سے عام طریقے - آپ تقریبا کبھی بھی کنسٹرکٹر کے ساتھ "ہاتھ سے" وعدہ نہیں بنائیں گے:
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 APIs یا سیٹ ٹائم آؤٹ) استعمال ہوں۔
اسے آزمائیں
'promisedVersion(n)' کی وضاحت کریں جو، ایک نمبر کے ساتھ، n کے دوہرے کے ساتھ حل شدہ وعدہ واپس کرتا ہے۔
اشارہ دکھائیں۔
Promise.resolve (n * 2) واپس کریں
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
`incrementThree(p)` کی وضاحت کریں جو ایک نمبر کا وعدہ وصول کرتا ہے اور نمبر + 3 کا وعدہ واپس کرتا ہے۔ پھر چین کا استعمال کریں۔
اشارہ دکھائیں۔
p.then((n) => n + 3)
3 کوششوں کے بعد حل دستیاب ہے۔