से एक वायदा हैंडलर समारोह बाइंडिंग मैं जैसे कुछ कोड है। मुझे पता है कि मुझे myFunc.bind(this)
का उपयोग करना होगा, लेकिन myFunc
के स्थान पर मैं क्या बदलूं?एक वस्तु
एक वस्तु
उत्तर
आप bind
इस तरह उपयोग कर सकते हैं:
var bar = foo().then(function success(value) {
// compute something from a value...
}, function failure(reason) {
// handle an error...
}.bind(this));
आप वर्तमान में अपने विफलता कॉलबैक द्वारा एक अज्ञात (हालांकि लेबल) समारोह है:
function failure(reason) {
// handle an error...
}
robertklep कहते हैं, तो आप तुरंत .bind
कॉल कर सकते हैं उस अज्ञात समारोह पर।
function success(value) {
// compute something from a value...
}
function failure(reason) {
// handle an error...
}
var bar = foo().then(success, failure.bind(this));
मुझे लगता है कि आपका मतलब है 'विफलता = failure.bind (यह) '? – robertklep
@robertklep आह, हो सकता है; मैं वास्तव में '.bind()' से परिचित नहीं हूँ। यदि यह जगह पर अभिनय करने की बजाय एक नई वस्तु देता है, तो मुझे लगता है कि 'foo()। (सफलता, विफलता। बाइंड (यह));' काफी पठनीय होगा। – IMSoP
हाँ यह एक नई वस्तु देता है :) क्योंकि अधिक पढ़ने योग्य होने के लिए, यह बहस का विषय है;) – robertklep
क्या मैं बहुत उपयोगी पाया एक खाली करने के लिए प्रत्येक then()
के [समारोह] हैंडलर बाध्य करने के लिए है: हालांकि, यह बजाय एक नामित समारोह का उपयोग करने के लिए, और .then()
में एक चर के रूप में इसे पारित अधिक पठनीय हो सकता है ऑब्जेक्ट, इसलिए प्रत्येक फ़ंक्शन तक पहुंच हो सकती है। फिर उपयोगकर्ता this
कीवर्ड द्वारा प्रत्येक वचन में गुण सेट और प्राप्त कर सकता है। इकाई परीक्षण ढांचे समान रूप से काम करता है।
chainPromiseList([getName,getAge],finalDone,rejectHandle);
function chainPromiseList(promiseList,finalDone,errHandle){
var userContext = new UserContext();
if(typeof finalDone==='function') promiseList.push(finalDone);
if(typeof errHandle==='function') promiseList.push(errHandle);
return promiseList.reduce((total,curVal,curInd,arr)=>{
var last = curInd+1===arr.length;
var method = last&&typeof errHandle==='function' ? 'catch':'then';
var concatenated = total[method](curVal.bind(userContext));
return concatenated;
},Promise.resolve());
function UserContext(){};
}
function getName(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('got name!');
this.name = 'Paul';
resolve();
},500);
});
}
function getAge(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('got age!');
this.age = 26;
resolve();
},500);
});
}
function finalDone(){
console.log(`Hello, I'm ${this.name} and I'm ${this.age}yo.`);
}
function rejectHandle(msg){
console.log('Error: ',msg);
}
- 1. एक वस्तु
- 2. एक वस्तु
- 3. एक वस्तु
- 4. एक वस्तु
- 5. एक वस्तु
- 6. एक तारीख वस्तु (छह माह पहले) एक और तारीख वस्तु
- 7. एक विधि एक सिंगलटन वस्तु
- 8. एक submodule एक मॉड्यूल वस्तु
- 9. एक ही वस्तु एक ManyToManyField
- 10. यदि एक वस्तु एक संग्रह
- 11. एक उत्तर वस्तु
- 12. कैसे एक ही वस्तु
- 13. AttributeError जब एक वस्तु
- 14. सी में एक वस्तु ++
- 15. एक कैलेंडर वस्तु
- 16. एक कस्टम वस्तु
- 17. डेटा- परिवर्तित * एक वस्तु
- 18. एक वस्तु जो रूबी
- 19. एक XTS वस्तु
- 20. एक उप-वस्तु संपत्ति
- 21. एक वस्तु निर्माण
- 22. एक jQuery वस्तु
- 23. वस्तु में एक चर
- 24. यदि एक वस्तु संपत्ति
- 25. छपाई सब एक वस्तु
- 26. ग # एक वस्तु
- 27. "विघटित" एक स्थगित वस्तु
- 28. Three.js: एक वस्तु
- 29. Uncaught DOMException: एक वस्तु
- 30. एक वस्तु संपत्ति
promisses आप किस तरह के बारे में बात कर रहे हैं? जावास्क्रिप्ट प्रोमिस अभी भी ES6 – fmsf
के लिए चर्चा में है हां, मैं जावास्क्रिप्ट के वादे के बारे में बात कर रहा हूं। –
यह विश्वास करना मुश्किल है, es6 जावास्क्रिप्ट वादे अभी भी लागू नहीं किए गए हैं। आपको अधिक संदर्भ प्रदान करने की आवश्यकता है। http://mozilla.6506.n7.nabble.com/ समझौता- भविष्य-asynchrony-in-then-td278846.html#a279080 – fmsf