जावास्क्रिप्ट वादे
"मैं एक परिणाम का वादा करता हूँ!"
"उत्पादन कोड" वह कोड है जिसमें कुछ समय लग सकता है
"उपभोग कोड" वह कोड है जिसे परिणाम की प्रतीक्षा करनी चाहिए
एक वादा एक जावास्क्रिप्ट ऑब्जेक्ट है जो उत्पादन कोड और उपभोग कोड को जोड़ता है
जावास्क्रिप्ट वादा वस्तु
एक जावास्क्रिप्ट प्रॉमिस ऑब्जेक्ट में उत्पादन कोड और उपभोग करने वाले कोड के लिए कॉल दोनों होते हैं:
वादा वाक्य रचना
let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code" (May take some time)
myResolve(); // when successful
myReject(); // when error
});
// "Consuming Code" (Must wait for a fulfilled Promise)
myPromise.then(
function(value) { /* code if successful */ },
function(error) { /* code if some error */ }
);
जब उत्पादन कोड परिणाम प्राप्त करता है, तो उसे दो कॉलबैक में से एक को कॉल करना चाहिए:
परिणाम | बुलाना |
---|---|
सफलता | myResolve (परिणाम मान) |
त्रुटि | myReject (त्रुटि वस्तु) |
वादा वस्तु गुण
एक जावास्क्रिप्ट वादा वस्तु हो सकती है:
- लंबित
- पूरा
- अस्वीकार कर दिया
प्रॉमिस ऑब्जेक्ट दो गुणों का समर्थन करता है: राज्य और परिणाम ।
जबकि एक वादा वस्तु "लंबित" (काम कर रही है), परिणाम अपरिभाषित है।
जब एक वादा वस्तु "पूरा" होता है, तो परिणाम एक मूल्य होता है।
जब एक वादा वस्तु "अस्वीकार" होती है, तो परिणाम एक त्रुटि वस्तु होती है।
myPromise.state | myPromise.result |
---|---|
"लंबित" | अपरिभाषित |
"पूरा" | एक परिणाम मूल्य |
"अस्वीकार कर दिया" | एक त्रुटि वस्तु |
आप प्रॉमिस प्रॉपर्टी की स्थिति और परिणाम तक नहीं पहुंच सकते ।
वादों को संभालने के लिए आपको एक वादा पद्धति का उपयोग करना चाहिए।
वादा कैसे करें
यहाँ एक वादे का उपयोग करने का तरीका बताया गया है:
myPromise.then(
function(value) { /* code if successful */ },
function(error) { /* code if some error */ }
);
Promise.then() दो तर्क लेता है, सफलता के लिए एक कॉलबैक और दूसरा विफलता के लिए।
दोनों वैकल्पिक हैं, इसलिए आप केवल सफलता या विफलता के लिए कॉलबैक जोड़ सकते हैं।
उदाहरण
function myDisplayer(some) {
document.getElementById("demo").innerHTML = some;
}
let myPromise = new Promise(function(myResolve, myReject) {
let x = 0;
// The producing code (this may take some time)
if (x == 0) {
myResolve("OK");
} else {
myReject("Error");
}
});
myPromise.then(
function(value) {myDisplayer(value);},
function(error) {myDisplayer(error);}
);
जावास्क्रिप्ट वादा उदाहरण
वादों के उपयोग को प्रदर्शित करने के लिए, हम पिछले अध्याय के कॉलबैक उदाहरणों का उपयोग करेंगे:
- एक टाइमआउट की प्रतीक्षा में
- फ़ाइल की प्रतीक्षा में
एक टाइमआउट की प्रतीक्षा में
कॉलबैक का उपयोग करने का उदाहरण
setTimeout(function() { myFunction("I love You !!!"); }, 3000);
function myFunction(value) {
document.getElementById("demo").innerHTML = value;
}
वादा का उपयोग करने का उदाहरण
let myPromise = new Promise(function(myResolve, myReject) {
setTimeout(function() { myResolve("I love You !!"); }, 3000);
});
myPromise.then(function(value) {
document.getElementById("demo").innerHTML = value;
});
फ़ाइल की प्रतीक्षा में
कॉलबैक का उपयोग कर उदाहरण
function getFile(myCallback) {
let req = new XMLHttpRequest();
req.open('GET', "mycar.html");
req.onload = function() {
if (req.status == 200) {
myCallback(req.responseText);
} else {
myCallback("Error: " + req.status);
}
}
req.send();
}
getFile(myDisplayer);
वादा का उपयोग कर उदाहरण
let myPromise = new Promise(function(myResolve, myReject) {
let req = new XMLHttpRequest();
req.open('GET', "mycar.htm");
req.onload = function() {
if (req.status == 200) {
myResolve(req.response);
} else {
myReject("File not Found");
}
};
req.send();
});
myPromise.then(
function(value) {myDisplayer(value);},
function(error) {myDisplayer(error);}
);
ब्राउज़र समर्थन
ईसीएमएस्क्रिप्ट 2015, जिसे ईएस6 के नाम से भी जाना जाता है, ने जावास्क्रिप्ट प्रॉमिस ऑब्जेक्ट पेश किया।
निम्न तालिका वादा वस्तुओं के लिए पूर्ण समर्थन के साथ पहले ब्राउज़र संस्करण को परिभाषित करती है:
Chrome 33 | Edge 12 | Firefox 29 | Safari 7.1 | Opera 20 |
Feb, 2014 | Jul, 2015 | Apr, 2014 | Sep, 2014 | Mar, 2014 |