JavaScript में पहले से ही सफल प्रॉमिसेज बनाना
कभी-कभी आपको पहले से ही
पूरा किया हुआ प्रॉमिस बनाने की आवश्यकता हो सकती है। इसके लिए
दो तरीके हैं: विधि Promise.resolve
सफलतापूर्वक पूरा किया गया प्रॉमिस बनाती है, Promise.reject
अस्वीकृत प्रॉमिस बनाती है। पैरामीटर के रूप में ये
विधियाँ वह प्राप्त करती हैं जो क्रमशः प्रॉमिस का परिणाम
या त्रुटि बन जाएगा।
हमें पहले से ही पूरा किए गए प्रॉमिस की आवश्यकता कब पड़ सकती है? आइए एक उदाहरण देखें। मान लीजिए कि हमारे पास कोई फ़ंक्शन है जो पैरामीटर के रूप में एक संख्या लेता है, इसके साथ कुछ एसिंक्रोनस रूप से करता है और परिणाम के साथ एक प्रॉमिस लौटाता है:
function func(num) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
}
हम अपने फ़ंक्शन का उपयोग निम्नलिखित तरीके से करेंगे:
func(5).then(function(res) {
console.log(res); // 25 आउटपुट करेगा
});
अब मान लीजिए कि हमने तय किया कि हमारी एसिंक्रोनस ऑपरेशन हम केवल तभी करेंगे जब शून्य से बड़ी संख्या पास की गई हो। अन्यथा फ़ंक्शन का परिणाम शून्य होना चाहिए:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return 0; // शून्य परिणाम
}
}
हालाँकि, अब ऐसा होता है कि फ़ंक्शन या तो
प्रॉमिस लौटाता है, या एक संख्या। इसके कारण हम अब
फ़ंक्शन के परिणाम पर then विधि
लागू नहीं कर सकते, क्योंकि फ़ंक्शन द्वारा
संख्या वापस करने की स्थिति में हमें त्रुटि मिलेगी:
func(0).then(function(res) { // त्रुटि, हम शून्य पर then विधि लागू कर रहे हैं
});
इस समस्या को ठीक करने में Promise.resolve हमारी मदद करेगा:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return Promise.resolve(0); // हम प्रॉमिस लौटाते हैं, संख्या नहीं
}
}
अब मान लीजिए कि हमने तय किया कि पास किए गए
शून्य के लिए हमें शून्य वापस करना चाहिए, और शून्य से
कम संख्याओं के लिए - एक अपवाद। इसमें Promise.reject विधि हमारी मदद करेगी:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else if (num === 0) {
return Promise.resolve(0);
} else {
return Promise.reject('incorrect number'); // हम एक अस्वीकृत प्रॉमिस लौटाते हैं
}
}