खोज…
परिचय
Async कॉलबैक का उपयोग करते समय हमें गुंजाइश पर विचार करने की आवश्यकता होती है। खासकर अगर एक लूप के अंदर। यह सरल लेख दिखाता है कि क्या नहीं करना है और एक सरल कार्य उदाहरण है।
त्रुटिपूर्ण कोड, क्या आप देख सकते हैं कि कुंजी के इस उपयोग से कीड़े क्यों पैदा होंगे?
var pipeline = {};
// (...) adding things in pipeline
for(var key in pipeline) {
fs.stat(pipeline[key].path, function(err, stats) {
if (err) {
// clear that one
delete pipeline[key];
return;
}
// (...)
pipeline[key].count++;
});
}
समस्या यह है कि var कुंजी का केवल एक उदाहरण है। सभी कॉलबैक समान कुंजी उदाहरण साझा करेंगे। जिस समय कॉलबैक में आग लगेगी, उस समय चाबी सबसे अधिक बढ़ेगी और उस तत्व की ओर इशारा नहीं करेगी जिसके लिए हम आंकड़े प्राप्त कर रहे हैं।
सही लिखना
var pipeline = {};
// (...) adding things in pipeline
var processOneFile = function(key) {
fs.stat(pipeline[key].path, function(err, stats) {
if (err) {
// clear that one
delete pipeline[key];
return;
}
// (...)
pipeline[key].count++;
});
};
// verify it is not growing
for(var key in pipeline) {
processOneFileInPipeline(key);
}
एक नया कार्य बनाकर, हम एक समारोह के अंदर कुंजी देखते हुए कर रहे हैं ताकि सभी कॉलबैक अपने स्वयं के प्रमुख उदाहरण है।
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow