Ich kann eine JavaScript-Funktion als “asynchron” markieren (dh ein Versprechen zurückgeben) mit dem async
Stichwort. So was:
async function foo() {
// Do something
}
Was ist die äquivalente Syntax für Pfeilfunktionen?
BonsaiEiche
Ich kann eine JavaScript-Funktion als “asynchron” markieren (dh ein Versprechen zurückgeben) mit dem async
Stichwort. So was:
async function foo() {
// Do something
}
Was ist die äquivalente Syntax für Pfeilfunktionen?
BonsaiEiche
Asynchron Pfeilfunktionen sieht aus wie das:
const foo = async () => {
// do something
}
Asynchron Pfeilfunktionen so aussehen für a einziges Argument dazu übergegangen:
const foo = async evt => {
// do something with evt
}
Asynchron Pfeilfunktionen so aussehen für mehrere Argumente dazu übergegangen:
const foo = async (evt, callback) => {
// do something with evt
// return response with callback
}
Der anonym Formular geht auch:
const foo = async function() {
// do something
}
Eine asynchrone Funktion Erklärung sieht aus wie das:
async function foo() {
// do something
}
Verwenden der Async-Funktion in a Ruf zurück:
const foo = event.onCall(async () => {
// do something
})
Verwenden Async-Methode innerhalb von a Klasse:
async foo() {
// do something
}
Das OP scheint nach einer benannten, asynchronen Pfeilfunktion zu suchen, die die einzige Syntax ist, die Sie nicht zeigen.
– jfriend00
22. März 17 um 23:19 Uhr
Tatsächlich, const foo = async () => {}
erstellt eine benannte asynchrone Funktion namens foo
. Es ist durchaus möglich, benannte Funktionen auf diese Weise auszuführen (nur kein Heben). In ES2016+ wird die Zuordnung einer anonymen Funktion zu einer Variablen nach der Variablen benannt, wenn sie dort deklariert ist.
– Benjamin Grünbaum
22. März 17 um 23:55 Uhr
@BenjaminGruenbaum Bitte nennen Sie es nicht benannte Funktion. In js ist eine benannte anonyme Funktion eine sehr spezifische Syntax foo = function bar () {}
die geschaffen wurde, um zu ersetzen arguments.callee
beim Schreiben rekursiver anonymer Funktionen. Was Sie dort haben, ist eine Variable namens foo
das ist ein Verweis auf eine Funktion.
– Schlafmann
4. Juni 17 um 2:32 Uhr
@slebetman seit ES2015, wenn du es tust const foo = async () => {}
der Name der Funktion wird auf gesetzt foo
– ecma-international.org/ecma-262/6.0/… und ecma-international.org/ecma-262/6.0/… – Siehe Diskussion in esdiscuss.org/topic/…
– Benjamin Grünbaum
4. Juni 17 um 19:03 Uhr
@FarisRayhan Es ist wie bei anderen Konstanten die Referenz der Variablen somefunction
kann nach der Einstellung nicht mehr geändert werden. (Es zeigt auf Ihre anonyme asynchrone Funktion.)
– QWERTZ
24. Juli 18 um 12:16 Uhr
Edoardo L’Astorina
Dies ist die einfachste Art, eine zuzuweisen async
Pfeilfunktion Ausdruck zu einem genannt Variable:
const foo = async () => {
// do something
}
(Beachten Sie, dass dies nicht unbedingt gleichwertig ist mit async function foo() { }
. Abgesehen von den Unterschieden zwischen den function
Schlüsselwort und ein Pfeilausdruck, die Funktion in dieser Antwort ist es nicht „auf die Spitze gehoben“.)
Beachten Sie, dass ein benannter Funktionsausdruck eine sehr spezifische Syntax in Javascript ist. Dies ist KEIN benannter Funktionsausdruck. Die Verwendung der richtigen Wörter ist wichtig, um später Verwirrung zu vermeiden, wenn sich ein Satz zu zwei Bedeutungen entwickeln kann. Zu Ihrer Information, ein benannter Funktionsausdruck ist: foo = function myName () {}
. Der Name ist myName
und es ist angegeben, dass es nur innerhalb der anonymen Funktion existiert und nirgendwo außerhalb definiert ist. Sein Zweck ist zu ersetzen arguments.callee
beim Schreiben rekursiver anonymer Funktionen.
– Schlafmann
4. Juni 17 um 2:30 Uhr
Ich wollte Sie @slebetman technisch anfechten, da dies ein (Pfeil-) Funktionsausdruck ist und Sie am Ende eine benannte Funktion (dh foo.name === 'foo'
). Aber nur, weil es im Initialisierer von a steht const
*Anweisung* – was bedeutet, dass es nicht ganz richtig ist, dies als “benannten asynchronen Pfeilfunktionsausdruck” zu bezeichnen. Sie haben auch Recht, dass der Name eines benannten Funktionsausdrucks nur ist gebunden in seinem eigenen Körper, aber es wird auch in dem der Funktion gespeichert name
-Eigenschaft, die sich gut zum Debuggen eignet (und häufiger der Grund ist, warum ich sie nenne).
– Vaz
02.09.17 um 23:32 Uhr
Um es anders auszudrücken, es gibt keinen “benannten Pfeilfunktionsausdruck”, aber er kann “benannt” werden, indem er Teil einer Konstante oder eines Let ist Erklärung (bei var wegen des Hebens nicht sicher), im Sinne eines Namens fn.name
sowie eine Bindung im Geltungsbereich (die Variable).
– Vaz
02.09.17 um 23:35 Uhr
Michael
Sofort aufgerufene asynchrone Pfeilfunktion:
(async () => {
console.log(await asyncFunction());
})();
Sofort aufgerufener asynchroner Funktionsausdruck:
(async function () {
console.log(await asyncFunction());
})();
Codespiegel
Async Arrow-Funktionssyntax mit Parametern
const myFunction = async (a, b, c) => {
// Code here
}
Einfaches Beispiel
folder = async () => {
let fold = await getFold();
//await localStorage.save('folder');
return fold;
};
Justin E. Samuels
Sie können auch Folgendes tun:
YourAsyncFunctionName = async (value) => {
/* Code goes here */
}
async function foo() {
// do something
}
Ist äquivalent zu:
const foo = async () => {
// do something
}
Aufruf von foo mit einem Argument wie im folgenden Beispiel:
async function foo(arg1) {
// do something
}
Entspricht dem Aufruf von foo auf diese Weise (beide Möglichkeiten sind akzeptabel, da Klammern optional, aber nicht erforderlich sind, wenn nur ein Argument angegeben wird)
const foo = async arg1 => {
// do something
}
const foo = async (arg1) => {
// do something
}
wenn Sie foo mit zwei oder mehr Argumenten aufrufen
async function foo(arg1, arg2) {
// do something
}
Entspricht: (Klammern sind jetzt erforderlich)
const foo = async (arg1, arg2) => {
// do something
}
Und für ein praktisches Beispiel mit einer Await-Verwendung im Inneren:
const foo = async () => await Promise.resolve('done');
.
Es ist erwähnenswert, dass Sie dies zumindest mit Firefox und Babel tun können
– Jaromanda X
22. März 17 um 22:55 Uhr
var foo = async () => await Promise.resolve('ha');
– funktioniert einwandfrei– Jaromanda X
22. März 17 um 22:56 Uhr
Sprichwort
it doesn't work
ist bedeutungslos … erhalten Sie eine Fehlermeldung? Vielleicht machst du etwas anderes falsch, ohne den Code, der “nicht funktioniert” und eine aussagekräftige Beschreibung, wie es nicht funktioniert, kannst du nur vermuten, dass du etwas falsch machst (oder einen alten Browser verwendest)– Jaromanda X
22. März 17 um 22:57 Uhr
das kann durchaus @Pointy sein, aber es funktioniert nativ in aktuellem Firefox und Chrome und node.js (7.7.4)
– Jaromanda X
22. März 17 um 22:59 Uhr
Der ES2017-Spezifikation hat einen Abschnitt über asynchrone Pfeilfunktionsdefinitionen @Pointy.
– Ketzeraffe
22. März 17 um 23:05 Uhr