Mogę oznaczyć funkcję javascript jako „asynchroniczną” (tzn. Zwracającą obietnicę) async
słowem kluczowym. Lubię to:
async function foo() {
// do something
}
Jaka jest równoważna składnia funkcji strzałek?
javascript
promise
async-await
arrow-functions
Dąb Bonsai
źródło
źródło
var foo = async () => await Promise.resolve('ha');
- działa dobrzeit doesn't work
jest bez znaczenia ... czy pojawia się błąd? być może robisz coś innego źle, bez kodu, który „nie działa” i sensowny opis tego, jak to nie działa, możesz jedynie zgadywać, że robisz coś źle (lub używasz starej przeglądarki)Odpowiedzi:
Funkcje strzałek asynchronicznych wyglądają następująco:
Funkcje strzałek asynchronicznych wyglądają tak dla jednego przekazanego argumentu :
Funkcje strzałek asynchronicznych wyglądają tak dla wielu przekazanych do niej argumentów :
Anonimowy formularz działa również:
Deklaracja funkcji asynchronicznej wygląda następująco:
Używanie funkcji asynchronicznej w wywołaniu zwrotnym :
źródło
const foo = async () => {}
tworzy nazwaną funkcję asynchroniczną o nazwiefoo
. W ten sposób można w pełni wykonywać funkcje nazwane (po prostu bez podnoszenia). W ES2016 + przypisanie funkcji anonimowej do zmiennej nazywa ją po zmiennej, jeśli jest tam zadeklarowana.foo = function bar () {}
która została utworzona w celu zastąpieniaarguments.callee
podczas pisania rekurencyjnych funkcji anonimowych. To, co masz, to zmienna o nazwie,foo
która jest odwołaniem do funkcji.const foo = async () => {}
nazwa funkcji jest ustawiona nafoo
- ecma-international.org/ecma-262/6.0/... i ecma-international.org/ecma-262/6.0/... - patrz dyskusja na esdiscuss.org / topic /…somefunction
nie można zmienić po jej ustawieniu. (Wskazuje na twoją anonimową funkcję asynchroniczną).To najprostszy sposób przypisania wyrażenia
async
funkcji strzałki do nazwanej zmiennej:(Zauważ, że nie jest to ściśle równoważne
async function foo() { }
. Oprócz różnic międzyfunction
słowem kluczowym a wyrażeniem strzałki , funkcja w tej odpowiedzi nie jest „podniesiona do góry” .)źródło
foo = function myName () {}
. Nazwa ma namyName
celu istnienie tylko wewnątrz funkcji anonimowej i nie jest zdefiniowana nigdzie na zewnątrz. Jego celem jest zastąpieniearguments.callee
podczas pisania rekurencyjnych funkcji anonimowych.foo.name === 'foo'
.). Ale tylko dlatego, że znajduje się on w inicjalizatorzeconst
* instrukcji * - co oznacza, że nie jest właściwe nazywać to „nazwanym wyrażeniem funkcji asynchronicznej strzałki”. Masz również rację, że nazwa nazwanego wyrażenia funkcji jest związana tylko w jego własnym ciele, ale jest także przechowywana we właściwości funkcjiname
, co jest przydatne do debugowania (i częściej jest to powód, dla którego je nazywam).fn.name
oraz posiadające powiązanie w zakresie (zmienna).Natychmiast wywołana funkcja strzałki asynchronicznej:
Wywołane natychmiast wyrażenie asynchroniczne:
źródło
Składnia funkcji strzałki asynchronicznej z parametrami
źródło
Podstawowy przykład
źródło
Możesz także:
źródło