Je peux marquer une fonction javascript comme "async" (c'est-à-dire renvoyer une promesse) avec le async
mot - clé. Comme ça:
async function foo() {
// do something
}
Quelle est la syntaxe équivalente pour les fonctions flèches?
javascript
promise
async-await
arrow-functions
BonsaiOak
la source
la source
var foo = async () => await Promise.resolve('ha');
- fonctionne très bienit doesn't work
n'a pas de sens ... obtenez-vous une erreur? peut-être que vous faites quelque chose de mal, sans le code qui "ne fonctionne pas" et une description significative de la façon dont cela ne fonctionne pas, ne peut que deviner que vous faites quelque chose de mal (ou en utilisant un ancien navigateur)Réponses:
Les fonctions des flèches asynchrones ressemblent à ceci:
Les fonctions fléchées asynchrones ressemblent à ceci pour un seul argument qui lui est passé:
Les fonctions de flèche asynchrone ressemblent à ceci pour plusieurs arguments qui lui sont passés:
Le formulaire anonyme fonctionne également:
Une déclaration de fonction asynchrone ressemble à ceci:
Utilisation de la fonction asynchrone dans un rappel :
la source
const foo = async () => {}
crée une fonction asynchrone nommée nomméefoo
. Il est tout à fait possible de faire des fonctions nommées de cette façon (juste pas de levage). Dans ES2016 + l'attribution d'une fonction anonyme à une variable la nomme après la variable si elle y est déclarée.foo = function bar () {}
qui a été créée pour remplacerarguments.callee
lors de l'écriture de fonctions anonymes récursives. Ce que vous avez là est une variable nomméefoo
qui est une référence à une fonction.const foo = async () => {}
le nom de la fonction est défini surfoo
- ecma-international.org/ecma-262/6.0/… et ecma-international.org/ecma-262/6.0/… - voir la discussion sur esdiscuss.org / topic /…somefunction
ne peut pas être modifiée une fois qu'elle est définie. (Il pointe vers votre fonction asynchrone anonyme.)C'est le moyen le plus simple d'affecter une expression de
async
fonction de flèche à une variable nommée :(Notez que ce n'est pas strictement équivalent à
async function foo() { }
. Outre les différences entre lefunction
mot clé et une expression de flèche , la fonction de cette réponse n'est pas "hissée vers le haut" .)la source
foo = function myName () {}
. Le nom estmyName
et il est spécifié qu'il n'existe qu'à l'intérieur de la fonction anonyme et n'est défini nulle part à l'extérieur. Son but est de remplacerarguments.callee
lors de l'écriture de fonctions anonymes récursives.foo.name === 'foo'
). Mais seulement parce que c'est dans l'initialiseur d'uneconst
instruction * - ce qui signifie qu'il n'est pas tout à fait juste d'appeler cela une "expression de fonction de flèche asynchrone nommée". Vous avez également raison de dire que le nom d'une expression de fonction nommée n'est lié qu'à l' intérieur de son propre corps, mais il est également stocké dans laname
propriété de la fonction , ce qui est bien pour le débogage (et est plus souvent la raison pour laquelle je les nommerais).fn.name
ainsi qu'une portée de liaison (la variable).Fonction de flèche asynchrone immédiatement invoquée:
Expression de la fonction asynchrone immédiatement invoquée:
la source
Syntaxe de la fonction flèche asynchrone avec paramètres
la source
Exemple de base
la source
Vous pouvez également faire:
la source