অ্যাসিঙ্ক তীর ফাংশনের জন্য সিনট্যাক্স


496

আমি জাভাস্ক্রিপ্ট ফাংশনটি asyncকীওয়ার্ড সহ "async" (অর্থাত্ একটি প্রতিশ্রুতি ফেরানো) হিসাবে চিহ্নিত করতে পারি । এটার মত:

async function foo() {
  // do something
}

তীর ফাংশনের সমতুল্য বাক্য গঠন কী?


2
এটি লক্ষণীয় যে কমপক্ষে ফায়ারফক্স এবং
ব্যাবেল

15
var foo = async () => await Promise.resolve('ha');- ঠিক কাজ করে
জারোমন্ডা এক্স

2
বলা it doesn't workঅর্থহীন ... তুমি কি ত্রুটি পাচ্ছ? কোডটি "কাজ করে না" এবং এটি কীভাবে কাজ করে না তার অর্থপূর্ণ বিবরণ ছাড়াই আপনি অন্য কোনও ভুল করছেন, কেবল অনুমান করতে পারেন যে আপনি কিছু ভুল করছেন (বা একটি পুরানো ব্রাউজার ব্যবহার করছেন)
জারোমন্ডা এক্স

1
এটি @ পয়েন্ট হতে পারে তবে এটি বর্তমান ফায়ারফক্স এবং ক্রোম এবং
নোড.জেজে

1
ES2017 স্পাই এর @ অ্যাসিঙ্ক তীর ফাংশন সংজ্ঞা সম্পর্কিত একটি বিভাগ রয়েছে।
হেরেটিক বানর

উত্তর:


840

অ্যাসিঙ্ক তীর ফাংশনগুলি এর মতো দেখায়:

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

অ্যাসিঙ্ক তীর ফাংশনগুলি এটির কাছে দেওয়া একটি একক যুক্তির জন্য দেখতে দেখতে :

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

এ্যাসিঙ্ক তীর ফাংশনগুলি এতে একাধিক আর্গুমেন্টের জন্য প্রেরণে দেখায় :

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

বেনামী ফর্ম পাশাপাশি কাজ করে:

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

একটি অ্যাসিঙ্ক ফাংশন ঘোষণাটি এর মতো দেখাচ্ছে:

async function foo() {
  // do something
}

কলব্যাকে অ্যাসিঙ্ক ফাংশন ব্যবহার করা :

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

11
ওপি একটি নামযুক্ত, অ্যাসিঙ্ক, তীর ফাংশনটি সন্ধান করছে বলে মনে হচ্ছে যা আপনি প্রদর্শন করছেন না এমন একটি বাক্য গঠন।
jender00

48
আসলে, const foo = async () => {}একটি নামযুক্ত async ফাংশন তৈরি করে foo। নামকরণের কাজগুলি এইভাবে করা সম্পূর্ণভাবে সম্ভব (কেবল কোনও উত্তোলন নয়)। ES2016 + এ ভেরিয়েবলের একটি বেনামে ফাংশন নির্ধারণের ক্ষেত্রে এটির নাম ঘোষণা করা থাকলে এটি ভেরিয়েবলের পরে নামকরণ করে।
বেনিয়ামিন গ্রুইনবাউম

5
@ বেনজামিন গ্রুয়েনবাউম দয়া করে এটিকে নামকরণ ফাংশন বলবেন না। জেএসে, নামযুক্ত বেনামে ফাংশন একটি খুব নির্দিষ্ট বাক্য গঠন foo = function bar () {}যা arguments.calleeরিকার্সিভ বেনাম ফাংশন লেখার সময় প্রতিস্থাপনের জন্য তৈরি করা হয়েছিল । আপনার যা আছে তার নাম একটি ভেরিয়েবল fooযা কোনও ফাংশনের রেফারেন্স।
slebetman

18
আপনি ES2015 সাল থেকে স্লেবেটম্যান যখন ফাংশনটির const foo = async () => {}নামটি সেট করেন foo- ecma-international.org/ecma-262/6.0/… এবং বাস্তু - ইন্টারন্যাশনাল। / বিষয় /…
বেনিয়ামিন গ্রুইনবাউম

1
@ ফরিসরেহান এটি অন্যান্য ধ্রুবকের মতো, ভেরিয়েবলের রেফারেন্স somefunctionসেট হওয়ার পরেও পরিবর্তন করা যায় না। (এটি আপনার বেনামে অ্যাসিঙ্ক ফাংশনটি নির্দেশ করে))
কিওয়ার্টি

129

একটি দায়িত্ব অর্পণ করা এই সহজ উপায় asyncতীর ফাংশন অভিব্যক্তি একটি থেকে নামে পরিবর্তনশীল:

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

(দ্রষ্টব্য যে এটি কঠোরভাবে সমতুল্য নয় the কীওয়ার্ড এবং একটি তীর অভিব্যক্তির মধ্যে পার্থক্যasync function foo() { } ছাড়াও এই উত্তরের ক্রিয়াটি "শীর্ষে তোলা" নয় ))function


11
নোট করুন যে একটি নামযুক্ত ফাংশন এক্সপ্রেশন জাভাস্ক্রিপ্টে একটি খুব নির্দিষ্ট বাক্য গঠন। এটি কোনও নামকৃত ফাংশন এক্সপ্রেশন নয়। একটি শব্দগুচ্ছ দুটি জিনিস বোঝাতে যখন বিকশিত হতে পারে তখন পরে বিভ্রান্তি এড়াতে সঠিক শব্দ ব্যবহার করা গুরুত্বপূর্ণ। অবগতির জন্য, একটি নামাঙ্কিত ফাংশন অভিব্যক্তি: foo = function myName () {}। নামটি myNameএবং এটি কেবল বেনামে ফাংশনটির ভিতরে বিদ্যমান এবং এটি বাইরে কোথাও সংজ্ঞায়িত করা হয়নি। এর উদ্দেশ্য হ'ল arguments.calleeপুনরাবৃত্তিযোগ্য বেনামী ফাংশনগুলি লেখার সময় প্রতিস্থাপন করা ।
slebetman

1
আমি আপনাকে প্রযুক্তিবিদ হিসাবে স্লেবেটম্যান সম্পর্কে বিতর্ক করতে চলেছিলাম, যেহেতু এটি একটি (তীর) ফাংশন এক্সপ্রেশন এবং আপনি একটি নামকৃত ফাংশন (অর্থাত্ foo.name === 'foo') দিয়ে শেষ করেন । তবে কেবলমাত্র এটি একটি const* বিবৃতি * এর সূচনাযাত্রায় রয়েছে - এটি অর্থাত্ এটি "নামযুক্ত অ্যাসিঙ্ক তীর ফাংশন এক্সপ্রেশন" বলা একেবারেই ঠিক নয়। আপনি এটিও সঠিক যে একটি নামকৃত ফাংশন এক্সপ্রেশনটির নামটি কেবল তার নিজের দেহের অভ্যন্তরে আবদ্ধ , তবে এটি ফাংশনের nameসম্পত্তিতেও সঞ্চিত থাকে , যা ডিবাগিংয়ের জন্য দুর্দান্ত (এবং প্রায়শই আমি তাদের নাম রাখার কারণ হয়)।
ওয়াজ

3
এটিকে অন্যভাবে বলতে গেলে, "নামযুক্ত তীর ফাংশন এক্সপ্রেশন" বলে কিছুই নেই, তবে এটি কনস্টের অংশ হয়ে বা বিবৃতি দেওয়া (উত্তোলনের কারণে ভার সম্পর্কে নিশ্চিত নয়) হয়ে অর্থে "নামকরণ" হতে পারে একটি নাম fn.nameপাশাপাশি স্কোপে একটি বাঁধাই করা (ভেরিয়েবল)।
ওয়াজ

41

তাত্ক্ষণিকভাবে অনুরোধ করা অ্যাসিঙ্ক তীর ফাংশন:

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

তাত্ক্ষণিকভাবে অনুরোধ করা Async ফাংশন এক্সপ্রেশন:

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

18

পরামিতিগুলির সাথে অ্যাসিঙ্ক তীর ফাংশন সিনট্যাক্স

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

17

বেসিক উদাহরণ

folder = async () => {
    let fold = await getFold();
    //await localStorage.save('folder');
    return fold;
  };

13

আপনিও করতে পারেন:

 YourAsyncFunctionName = async (value) => {

    /* Code goes here */

}

4
একটি পরম দিয়ে আপনার প্রথম বন্ধনী প্রয়োজন নেই। আপনারএন্সিঙ্কফানশননাম = অ্যাসিঙ্ক মান => {/ * কোড এখানে যায় * /}
টাকিসস জসোল্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.