2015-10-10 3 views
7

तो मैं Meteor में ES6 उपयोग शुरू कर दिया गया है, लेकिन जाहिरा तौर पर अगर आप एक तीर समारोह के साथ Meteor.publish सिंटैक्स का उपयोग करने का प्रयास करें, this.userId अपरिभाषित है, जबकि यदि आप इसे एक साथ उपयोग नियमित function(){}this.userId पूरी तरह से काम करता है, मुझे लगता है कि एक प्रकार की पारदर्शी प्रक्रिया है जो इसे अलग करती है, userId पर, लेकिन यह अनुमान है कि क्या कोई वास्तव में क्या हो रहा है?ES6 तीर समारोह Meteor.publish में इस के दायरे से बदल रहा है

Meteor.startup(function() { 
    Meteor.publish("Activities", function() { //with function 
     console.log(this.userId); //TS8vTE3z56LLcaCb5 
    }); 
}); 

Meteor.startup(function() { 
    Meteor.publish("Activities",()=> { //with arrow function 
     console.log(this.userId); //undefined 
    }); 
}); 
+0

एमडीएन से: * "एक तीर फ़ंक्शन अभिव्यक्ति (जिसे वसा तीर फ़ंक्शन के रूप में भी जाना जाता है) में फ़ंक्शन अभिव्यक्तियों की तुलना में एक छोटा वाक्यविन्यास होता है और **' '' 'मान को मूल्यवान रूप से बांधता है। '* Https: //developer.mozilla .org/en-US/docs/web/जावास्क्रिप्ट/संदर्भ/कार्य/तीर_फंक्शन –

+0

@ फ़ेलिक्सक्लिंग यह एक डुप्लिकेट प्रश्न कैसे है? – ncubica

+0

यह बताता है कि तीर कार्यों में यह 'कैसे' काम करता है। –

उत्तर

7

यह है एक transpilation त्रुटि नहीं है, यह तीर कार्यों के एक feature है। तीर फ़ंक्शन स्वचालित रूप से फ़ंक्शन बॉडी के संदर्भ को संदर्भों में सेट करता है जो इसे बनाया गया था, इस मामले में Meteor.publish पर कॉलबैक। यह उल्का को आपके श्रोता समारोह के संदर्भ को पुनर्निर्मित करने से रोकता है।

उल्का publish docs से:

समारोह के अंदर, यह आप चीजों को ठीक से काम आप "पुराने स्कूल" समारोह का उपयोग करने की आवश्यकता होगी चाहते हैं हैंडलर ऑब्जेक्ट

प्रकाशित है मेटायर को संदर्भ को सही तरीके से सेट करने की अनुमति देने के लिए वाक्यविन्यास।

+0

इसे "तीर फ़ंक्शन" कहा जाता है, न कि "वसा-तीर फ़ंक्शन"। –

+0

आप पूरी तरह से सही :) हालांकि वसा-तीर के पीछे एक मजबूत बोलचाल वजन है। मैं अद्यतन करूँगा! धन्यवाद –

+1

"एक तीर फ़ंक्शन अभिव्यक्ति (जिसे वसा तीर फ़ंक्शन भी कहा जाता है) ..." -एमडीएन –

संबंधित मुद्दे