का उपयोग किये बिना डिफरर्ड ऑब्जेक्ट को कार्यान्वित करें मैं jQuery का उपयोग किए बिना मूल डिफरर्ड ऑब्जेक्ट को कार्यान्वित करना चाहता हूं। यहां मैं कार्यों को हल और अस्वीकार करने के साथ ही केवल निष्पादित और विफल कॉलबैक लागू कर दूंगा। और इस समारोह के साथ promise
विधि को जोड़ने के लिए।jquery
मैं शुद्ध js में निम्नलिखित कार्यान्वयन (संपादित) कर रहा हूँ:
function Deferred() {
var d = {};
d.resolve = function() {
d.done(arguments);
}
d.reject = function() {
d.fail(arguments);
}
d.promise = function() {
var x = {};
x.done = function(args) {
return args;
}
x.fail = function(args) {
return args;
}
return x;
}
return d;
}
var v;
var setVal = function() {
var d = new Deferred();
setTimeout(function() {
v = 'a value';
d.resolve(this);
}, 5000);
return d.promise();
};
setVal().done(function() {
console.log('all done :' + v);
});
लेकिन इसके बाद के संस्करण त्रुटि देता है: Object #<Object> has no method 'fail'
मैं Deferred()
समारोह के लिए लौट आए वस्तु 'प' पता नहीं है विधि()। और अगर मैं Deferred()
से d.promise देता हूं तो इसमें कार्यों को हल और अस्वीकार नहीं किया जाएगा।
कृपया बताएं कि मैं डिफरर्ड ऑब्जेक्ट के सरल उद्देश्य को प्राप्त करने के लिए क्या त्रुटि कर रहा हूं। आप `new` साथ एक उदाहरण बनाने हैं तो आप` prototype` करने के तरीकों जोड़ना चाहिए http://jsfiddle.net/SyEmK/14/
:
यहाँ बेला मैं कर रहा हूँ है। कन्स्ट्रक्टर एक उदाहरण देता है, भले ही आप 'वापस लौटें'। आप 'var d = deferred()' – elclanrs
चाहते हैं कि आपके पास कोई विधि नहीं है। यदि आप अपनी वस्तु को देखते हैं, तो आपने संकल्प, अस्वीकार कर दिया है और वादा किया है। setVal() उन ऑब्जेक्ट्स के साथ आपके ऑब्जेक्ट का एक उदाहरण देता है। – THEtheChad
jQuery वादे को लागू करने के लिए एकमात्र पुस्तकालय नहीं है। – JayC