मुझे यकीन है कि मेरी समस्या node.js में asynch प्रोग्रामिंग की समझ की कमी पर आधारित है लेकिन यहां जाती है।नोड.जेएस: एसिंक्रोनस कॉलबैक में चर कैसे पास करें?
उदाहरण के लिए: मेरे पास लिंक की एक सूची है जिसे मैं क्रॉल करना चाहता हूं। जब प्रत्येक एसिंच अनुरोध लौटाता है तो मैं जानना चाहता हूं कि यह किस URL के लिए है। लेकिन, संभवतः दौड़ की स्थितियों के कारण, प्रत्येक अनुरोध सूची में अंतिम मान पर यूआरएल सेट के साथ आता है।
var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
var url = links[link];
require('request')(url, function() {
console.log(url);
});
}
अपेक्षित उत्पादन:
http://google.com
http://yahoo.com
वास्तविक उत्पादन:
http://yahoo.com
http://yahoo.com
तो मेरे सवाल है या तो:
- कैसे करें मैं यूआरएल (मूल्य) के द्वारा पारित कर वापस काम कॉल करें? या
- HTTP अनुरोधों को चेन करने का सही तरीका क्या है ताकि वे अनुक्रमिक रूप से चल सकें? या
- कुछ और मुझे याद आ रही है?
पीएस: 1 के लिए। मुझे ऐसा समाधान नहीं चाहिए जो कॉलबैक के पैरामीटर की जांच करे लेकिन कॉलबैक का सामान्य तरीका ऊपर से 'चर' के बारे में जान सके।
यह दायरे के बारे में नहीं है। यह बंद होने के बारे में है। कई अन्य भाषाओं में ब्लॉक स्कोप नहीं है, फिर भी बंद होने की कमी के कारण इस मुद्दे का सामना नहीं करते हैं। – slebetman
बिंदु यह है कि यदि जावास्क्रिप्ट ने ब्लॉक स्कोप का समर्थन किया है, तो ओपी के कोड के कॉलबैक फ़ंक्शन में 'url' को बंद करने का उपयोग काम करेगा क्योंकि लूप के प्रत्येक पुनरावृत्ति को अपना' url' चर (जैसे सी #) प्राप्त होगा। – JohnnyHK
आवश्यकता सिर्फ ब्रुविटी के लिए है, मेरे कोड में सभी आवश्यक शुरुआत में हैं। – Marc