एसिंक्स एरो फंक्शन के लिए सिंटैक्स


496

मैं asyncकीवर्ड के साथ एक जावास्क्रिप्ट फ़ंक्शन को "async" (यानी एक वादा वापस करने) के रूप में चिह्नित कर सकता हूं । ऐशे ही:

async function foo() {
  // do something
}

एरो फ़ंक्शंस के लिए बराबर सिंटैक्स क्या है?


2
यह ध्यान देने योग्य है कि कम से कम फ़ायरफ़ॉक्स और बेबल आपको ऐसा करने देता है
जैरोन्डा एक्स

15
var foo = async () => await Promise.resolve('ha');- बस ठीक काम करता है
Jaromanda X

2
यह कहना it doesn't workव्यर्थ है ... क्या आपको कोई त्रुटि हो रही है? शायद आप कोड के बिना कुछ और गलत कर रहे हैं, जो "काम नहीं करता है" और यह कैसे काम नहीं करता है का एक सार्थक विवरण, केवल अनुमान लगा सकता है कि आप कुछ गलत कर रहे हैं (या एक पुराने ब्राउज़र का उपयोग कर)
Jaromanda

1
यह अच्छी तरह से @Pointy हो सकता है, लेकिन यह मूल रूप से वर्तमान फ़ायरफ़ॉक्स और क्रोम और नोड में काम करता है। (rom.rom.४)
Jaromanda X

1
ES2017 कल्पना async तीर समारोह परिभाषाओं @Pointy पर एक अनुभाग है।
हेरिटिक मंकी

जवाबों:


840

Async एरो फ़ंक्शंस इस तरह दिखते हैं:

const foo = async () => {
  // do something
}

Async एरो फ़ंक्शंस इस तरह दिखाई देते हैं कि एक एकल तर्क इसके लिए पास हो गया है:

const foo = async evt => {
  // do something with evt
}

Async एरो फ़ंक्शंस इस तरह दिखाई देते हैं कि इसमें कई तर्क दिए गए हैं:

const foo = async (evt, callback) => {
  // do something with evt
  // return response with callback
}

गुमनाम रूप में अच्छी तरह से काम करता है:

const foo = async function() {
  // do something
}

एक async फ़ंक्शन घोषणा इस तरह दिखती है:

async function foo() {
  // do something
}

कॉलबैक में async फ़ंक्शन का उपयोग करना :

const foo = event.onCall(async () => {
  // do something
})

11
ओपी एक नाम, async, एरो फंक्शन की तलाश करता दिखाई देता है, जो एक सिंटेक्स है जो आप नहीं दिखाते हैं।
jfriend00

48
असल में, const foo = async () => {}नाम का एक async फ़ंक्शन बनाता है foo। इस तरह नामित कार्यों को करना पूरी तरह से संभव है (सिर्फ कोई उत्थापन नहीं)। ES2016 + में किसी अनाम फ़ंक्शन को वेरिएबल में असाइन करने के बाद उसे वेरिएबल में नाम दिया जाता है अगर वह वहां घोषित किया जाता है।
बेंजामिन ग्रुएनबाम

5
@BenjaminGruenbaum कृपया इसे फ़ंक्शन का नाम न दें। Js में, एक नामित अनाम फ़ंक्शन एक बहुत ही विशिष्ट सिंटैक्स है foo = function bar () {}जिसे arguments.calleeपुनरावर्ती अनाम फ़ंक्शन लिखते समय प्रतिस्थापित करने के लिए बनाया गया था । आपके पास एक चर है जिसका नाम fooएक फ़ंक्शन के लिए एक संदर्भ है।
स्लीपबेटमैन

18
ES2015 से @slebetman जब आप const foo = async () => {}फ़ंक्शन का नाम सेट करते हैं foo- ecma-international.org/ecma-262/6.0/… और ecma-international.org/ecma-262/6.0/… - esdiscuss.org
बेंजामिन ग्रुएनबाम

1
@FarisRayhan यह अन्य स्थिरांक के साथ जैसा है, वैरिएबल का संदर्भ somefunctionसेट होने के बाद इसे बदला नहीं जा सकता। (यह आपके अनाम async फंक्शन की ओर इशारा करता है।)
क्वर्टी

129

एक आवंटित करने के लिए यह सबसे आसान तरीका है asyncतीर समारोह अभिव्यक्ति एक करने के लिए नामित किया गया चर:

const foo = async () => {
  // do something
}

(ध्यान दें कि यह कड़ाई से समकक्ष नहीं है async function foo() { }कीवर्ड और एक तीर की अभिव्यक्ति के बीच अंतर केfunction अलावा , इस उत्तर में फ़ंक्शन "शीर्ष पर नहीं फहराया जाता है"


11
ध्यान दें कि एक नामित फ़ंक्शन अभिव्यक्ति जावास्क्रिप्ट में एक बहुत ही विशिष्ट वाक्यविन्यास है। यह एक नामित कार्य अभिव्यक्ति नहीं है। बाद में भ्रम से बचने के लिए सही शब्दों का उपयोग करना महत्वपूर्ण है जब एक वाक्यांश दो चीजों के अर्थ में विकसित हो सकता है। FYI करें, एक नामित समारोह अभिव्यक्ति है: foo = function myName () {}। नाम है myNameऔर यह केवल अनाम फ़ंक्शन के अंदर मौजूद है और बाहर कहीं भी परिभाषित नहीं है। इसका उद्देश्य arguments.calleeपुनरावर्ती अनाम कार्यों को लिखते समय प्रतिस्थापित करना है।
स्लीबेटमैन

1
मैं आपको तकनीकी रूप से @slebetman पर विवाद करने वाला था, क्योंकि यह एक (एरो) फ़ंक्शन एक्सप्रेशन है और आप एक नामित फ़ंक्शन (यानी foo.name === 'foo') के साथ समाप्त होते हैं । लेकिन केवल इसलिए कि यह एक const* स्टेटमेंट * के इनिशियलाइज़र में है - —इसके अलावा इसे "async एरो एक्सप्रेशन एक्सप्रेशन" कहना बिलकुल सही नहीं है। आप यह भी सही हैं कि एक नामित फ़ंक्शन एक्सप्रेशन का नाम केवल उसके ही शरीर के अंदर बंधा होता है, लेकिन यह फ़ंक्शन की nameसंपत्ति में भी संग्रहीत होता है, जो डिबगिंग के लिए अच्छा है (और अधिक बार कारण है कि मैं उनका नाम लूंगा)।
बाज

3
इसे दूसरे तरीके से रखने के लिए, "एरो फंक्शन एक्सप्रेशन" नाम की कोई चीज़ नहीं है, लेकिन यह किसी कॉन्स्टेंट का हिस्सा बनकर "नाम" बन सकता है या स्टेटमेंट (होर्डिंग की वजह से वेरिएशन के बारे में निश्चित नहीं), के अर्थ में एक नाम और fn.nameसाथ ही एक दायरा (चर) है।
वज़

41

तुरंत Async एरो फ़ंक्शन

(async () => {
    console.log(await asyncFunction());
})();

तुरंत Async फंक्शन एक्सप्रेशन:

(async function () {
    console.log(await asyncFunction());
})();

18

Async एरो पैरामीटर के साथ फ़ंक्शन सिंटैक्स

const myFunction = async (a, b, c) => {
   // Code here
}


13

आप भी कर सकते हैं:

 YourAsyncFunctionName = async (value) => {

    /* Code goes here */

}

4
एक परम के साथ आपको कोष्ठक की आवश्यकता नहीं है। YourAsyncFunctionName = async मान => {/ * कोड यहाँ जाता है * /}
Takscs Zsolt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.